当前位置: 首页 > article >正文

Vue 3.0中自定义指令

自定义指令是增强 Vue 组件的重要手段。常见的内置指令有: v-if、v-show、v-model、v-bind、v-on等。

本文将详细讲解如何创建和使用自定义指令,关注以下几个关键点:

1. 指令的钩子函数:类似于生命周期钩子函数。

2. 指令钩子函数中的参数:理解和使用这些参数是编写有效指令的关键。

3. 指令的逻辑处理:具体实现指令功能的核心。

1. 基本指令

我们通过一个简单的 v-focus 指令来入门,该指令可以让 input 组件在初始化渲染时自动获得焦点。

<script setup>
const vFocus = {mounted: (el) => el.focus()
}
</script><template><input v-focus />
</template>

如果你使用的是选项式 API,可以这样实现:

export default {directives: {focus: {mounted(el) {el.focus();}}}
}

2. 指令钩子函数

自定义指令包括多个钩子函数,类似于组件的生命周期函数:

const myDirective = {// 在绑定元素的 attribute 前调用created(el, binding, vnode, prevVnode) {// 初始化逻辑},// 在元素被插入到 DOM 前调用beforeMount(el, binding, vnode, prevVnode) {},// 在绑定元素及其子节点都挂载完成后调用mounted(el, binding, vnode, prevVnode) {},// 在父组件更新前调用beforeUpdate(el, binding, vnode, prevVnode) {},// 在父组件及其子节点更新后调用updated(el, binding, vnode, prevVnode) {},// 在父组件卸载前调用beforeUnmount(el, binding, vnode, prevVnode) {},// 在父组件卸载后调用unmounted(el, binding, vnode, prevVnode) {}
}

3. 参数详解

指令的钩子函数会接收以下参数:

1. el:指令绑定的元素,用于直接操作 DOM。

2. binding:包含指令相关信息的对象。

(1). value:传递给指令的值,例如在 v-my-directive="1 + 1" 中,值是 2。

(2). oldValue:之前的值,仅在 beforeUpdate 和 updated 中可用。

(3). arg:传递给指令的参数(如果有),例如在 v-my-directive:foo 中,参数是 "foo"。

(4). modifiers:一个包含修饰符的对象,例如在 v-my-directive.foo.bar 中,修饰符对象是 { foo: true, bar: true }。

(5). instance:使用该指令的组件实例。

(6). dir:指令的定义对象。

3. vnode:绑定元素的虚拟节点。

4. prevNode:之前的虚拟节点,仅在 beforeUpdate 和 updated 钩子中可用。

例如,以下代码:

<div v-example:foo.bar="baz">

binding 参数会是一个如下的对象:

{arg: 'foo',modifiers: { bar: true },value: /* `baz` 的值 */,oldValue: /* 上一次更新时 `baz` 的值 */
}

自定义指令的参数也可以是动态的:

<div v-example:[arg]="value"></div>

这里指令的参数会根据组件的 arg 数据属性响应式地更新。

4. 详解v-model

在实现双向绑定时,我们通常使用 v-model。其核心原理是结合 v-bind:value 和 v-on:input 来实现数据的同步。

Vue3 的 compiler-core 模块负责将模板编译为渲染函数,包括 AST 的生成、指令和表达式的处理、优化和代码生成等功能,适用于各种 JavaScript 环境。

而 compiler-dom 模块是针对浏览器环境的扩展,处理 DOM 元素的属性和事件编译,生成特定于浏览器环境的代码,用于开发基于 Vue3 的跨平台应用程序,如桌面和移动应用程序。

通过理解和运用这些钩子函数及参数,开发者可以创建功能强大且灵活的自定义指令,增强组件的交互性和可维护性。

相关文章:

Vue 3.0中自定义指令

自定义指令是增强 Vue 组件的重要手段。常见的内置指令有&#xff1a; v-if、v-show、v-model、v-bind、v-on等。 本文将详细讲解如何创建和使用自定义指令&#xff0c;关注以下几个关键点&#xff1a; 1. 指令的钩子函数&#xff1a;类似于生命周期钩子函数。 2. 指令钩子函…...

在 语义分割 和 图像分类 任务中,image、label 和 output 的形状会有所不同。

1. 图像分类 (Image Classification) 图像分类 任务是将整个图像分类为一个类别。通常&#xff0c;output 是对整个图像的类别的预测&#xff0c;而 label 是该图像的真实类别。 1.1 image 的形状 image 是输入图像数据&#xff0c;通常是一个四维张量&#xff1a; 形状&…...

C++面试4-sizeof解析

C++sizeof关键字的深度解析 一、本质认知:编译器的尺度 1. 编译期操作符的基因 int arr[5]; cout << sizeof(arr); // 输出20(假设int为4字节)非运行时特性:在编译阶段完成计算,不会生成任何机器指令表达式不求值:sizeof(++i)不会改变i的值类型感知:对类型名使…...

CyberSecAsia专访CertiK首席安全官:区块链行业亟需“安全优先”开发范式

近日&#xff0c;权威网络安全媒体CyberSecAsia发布了对CertiK首席安全官Wang Tielei博士的专访&#xff0c;双方围绕企业在进军区块链领域时所面临的关键安全风险与防御策略展开深入探讨。 Wang博士在采访中指出&#xff0c;跨链桥攻击、智能合约漏洞以及私钥管理不当&#x…...

uniapp如何设置uni.request可变请求ip地址

文章目录 简介方法一&#xff1a;直接在请求URL中嵌入变量方法二&#xff1a;使用全局变量方法三&#xff1a;使用环境变量方法四&#xff1a;服务端配置方法五&#xff1a;使用配置文件&#xff08;如config.js&#xff09;:总结 简介 在uni-app中&#xff0c;uni.request 用…...

文件操作和IO-3 文件内容的读写

文件内容的读写——数据流 流是操作系统提供的概念&#xff0c;Java对操作系统的流进行了封装。 数据流就像水流&#xff0c;生生不息&#xff0c;绵延不断。 水流的特点&#xff1a;比如要100mL的水&#xff0c;可以一次接10mL&#xff0c;分10次接完&#xff0c;也可以一次接…...

架构的设计

搭建架构的最低前提 1.设计清晰&#xff1a; 需求文档&#xff1a; 有哪些界面 每个界面提够了哪些功能 这些功能是怎样操作的 会有哪些反馈 2.技术&#xff1a; 写架构的同学&#xff1a;这次项目设计的技术 都要有料及&#xff08;用到的技术有哪些特点 有哪些缺点&…...

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 1.0 SpringAI 概述 目前大模型应用开发最常见的框架就是 LangChain&#xff0c;然而 LangChain 是基于 Python 语言&#xff0c;虽然有 LangChain4j&#xff0c;但是对于大量使…...

编程速递-RAD Studio 12.3 Athens五月补丁:May Patch Available

编程速递-RAD Studio 12.3 Athens四月补丁&#xff1a;关注软件性能的开发者&#xff0c;安装此补丁十分必要 今天 &#xff08;2025 年 5 月 19 日&#xff09;Embarcadero 发布了 RAD Studio、Delphi 和 CBuilder 12.3 Athens&#xff08;雅典&#xff09;的第二个补丁。 RA…...

Vue3实现轮播表(表格滚动)

在这之前,写过一篇Vue2实现该效果的博文:vue-seamless-scroll(一个简单的基于vue.js的无缝滚动) 有兴趣也可以去看下,这篇是用vue3实现,其实很简单,目的是方便后面用到直接复制既可以了。 安装: <...

Python爬虫(33)Python爬虫高阶:动态页面破解与验证码OCR识别全流程实战

目录 一、技术背景与行业痛点二、核心技术与实现路径2.1 动态页面处理方案对比2.2 Selenium深度集成实践2.3 OCR验证码破解方案1. 预处理阶段&#xff1a;2. 识别阶段&#xff1a;3. 后处理阶段 三、典型应用场景解析3.1 电商价格监控系统1. 技术架构2. 实现效果 3.2 社交媒体舆…...

Matlab学习合集

1.变量 2.常见的数学函数 3. 向量 向量的创建&#xff1a; 直接创建&#xff1a;针对于数量少的情况 冒号法 函数创建&#xff1a;...

基于labview的声音采集与存储分析系统

基于LabVIEW的声音信号采集与存储分析系统开发实战&#xff1a;从原理到代码实现 &#xff08;内含源码&#xff09;基于labview的声音采集与处理系统 点击跳转工坊 点击跳转视频 引言 在音频技术与工业监测领域&#xff0c;声音信号的实时采集与分析是一项基础且关键的任务。…...

【项目记录】部门增删改及日志技术

1 删除部门 1.1 需求 删除部门数据。在点击 "删除" 按钮&#xff0c;会根据ID删除部门数据。 了解了需求之后&#xff0c;我们再看看接口文档中&#xff0c;关于删除部门的接口的描述&#xff0c;然后根据接口文档进行服务端接口的开发。 1.2 接口描述 1.2.1 基…...

TDengine 更多安全策略

简介 上一节我们介绍了 TDengine 安全部署配置建议&#xff0c;除了传统的这些配置外&#xff0c;TDengine 还有其他的安全策略&#xff0c;例如 IP 白名单、审计日志、数据加密等&#xff0c;这些都是 TDengine Enterprise 特有功能&#xff0c;其中白名单功能在 3.2.0.0 版本…...

电子制造企业智能制造升级:MES系统应用深度解析

在全球电子信息产业深度变革的2025年&#xff0c;我国电子信息制造业正经历着增长与转型的双重考验。据权威数据显示&#xff0c;2025年一季度行业增加值同比增长11.5%&#xff0c;但智能手机等消费电子产量同比下降1.1%&#xff0c;市场竞争白热化趋势显著。叠加关税政策调整、…...

Java使用Collections集合工具类

1、Collections 集合工具类 Java 中的 Collections 是一个非常有用的工具类&#xff0c;它提供了许多静态方法来操作或返回集合。这个类位于 java.util 包中&#xff0c;主要包含对集合进行操作的方法&#xff0c;比如排序、搜索、线程安全化等。 Java集合工具类的使用&#x…...

磁盘空间不足,迁移Docker 数据目录

停止 Docker 服务。 sudo systemctl stop docker 将现有的 Docker 数据移动到新位置&#xff08;例如 /home/docker-data&#xff09;。 sudo mv /var/lib/docker /home/docker-data 在原位置创建一个指向新位置的符号链接。 sudo ln -s /home/docker-data /var/lib/dock…...

python打卡day33

知识点回顾&#xff1a; PyTorch和cuda的安装查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09;cuda的检查简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09;模型的定义 继承nn.Module类定义每一个层定义前向传播流程 定义损失函数和优化器定…...

目标检测新突破:用MSBlock打造更强YOLOv8

文章目录 YOLOv8的现状与挑战YOLO-MS的MSBlock简介MSBlock的工作原理MSBlock的优势利用MSBlock改进YOLOv8替换YOLOv8主干网络中的部分模块代码实现:替换CSP模块为MSBlock在YOLOv8的颈部(Neck)中插入MSBlock代码实现:在颈部区域插入MSBlock实验结果与分析实验设置性能对比性…...

同城上门预约服务系统案例分享,上门服务到家系统都有什么功能?这个功能,很重要!

你以为上门按摩这类平台只要做好接单派单就万事大吉了&#xff1f;大错特错&#xff01;市面上90%的系统只会吹嘘基础功能&#xff0c;却对最关键的财税问题避而不谈。很多创业者直到被税务稽查才发现&#xff0c;自己每年都在白白多交几倍的冤枉税&#xff01;举个例子&#x…...

docker面试题(5)

Docker安全么 Docker 利用了 Linux 内核中很多安全特性来保证不同容器之间的隔离&#xff0c;并且通过签名机制来对镜像进行 验证。大量生产环境的部署证明&#xff0c;Docker 虽然隔离性无法与虚拟机相比&#xff0c;但仍然具有极高的安全性。 如何清理后台停止的容器 可以使用…...

为什么需要在循环里fetch?

假设有多个设备连接在后端,数量不定,需要按个读回状态,那么就要在循环里fetch了. 此函数非常好用,来自于国内一个作者,时间久了,忘记了来源,抱歉. export default async function fetchWithTimeout(resource, options {}) {const { timeout 1000 } options;const controll…...

用 UniApp 开发 TilePuzzle:一个由 CodeBuddy 主动驱动的拼图小游戏

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念&#xff1a;从一个小游戏想法开始 最近在使用 UniApp 做练手项目的时候&#xff0c;我萌生了一个小小…...

HJ101 输入整型数组和排序标识【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ101 输入整型数组和排序标识 一、题目描述 二、测试用例 三、解题思路 基本思路&#xff1a;   选择一个排序算法&#xff0c;然后根据标识确定升序还是降序&#xff1b;具体思路&a…...

在Linux debian12系统上使用go语言以及excelize库处理excel数据

go-do-excel 一、介绍 myBook.xlsx表中,B列是“全部IP地址“,A列是“分发成功的IP地址“,本脚本采用go语言编写,通过读取myBook.xlsx中B列“全部IP地址“和A列“分发成功的IP地址“数据,计算出“分发失败的IP地址“数据,将其写入到C列。 二、编程语言 本脚本在Linux De…...

Appium 的 enableMultiWindows 参数

引言 在移动应用自动化测试中&#xff0c;​​混合应用&#xff08;Hybrid App&#xff09;​​ 和多窗口场景&#xff08;如分屏、弹窗、多 WebView&#xff09;的处理一直是技术难点。Appium 的 enableMultiWindows 参数为这类场景提供了关键支持&#xff0c;但在实际使用中常…...

【Python/Tkinter】实现程序菜单

程序源码&#xff1a; import tkinter as tk from tkinter.colorchooser import askcolordef set_colour():saskcolor(color"red",title"选择背景色")root.config(bgs[1])class Application(tk.Frame):def __init__(self,masterNone):super().__init__(ma…...

“轩辕杯“云盾砺剑 CTF挑战赛web方向题解

目录 ezjs 签到 ezssrf1.0 ezflask ezrce ezsql1.0 ezweb ezjs 看到这个&#xff0c;直接访问getflag.php&#xff0c;POS提交score 100000000000 签到 6个小模块&#xff0c;我直接放bp的结果 1 2 3 4 5 6 ezssrf1.0 ?urlhttp:127.0.1/FFFFF11111AAAAAggggg.php也可…...

常用UI自动化测试框架

&#x1f50d; 常用UI自动化测试框架全览&#xff08;Web / 移动 / 桌面 / AI驱动&#xff09; UI&#xff08;用户界面&#xff09;测试框架是一类用于自动化测试应用图形界面的工具&#xff0c;帮助开发者和测试人员验证界面元素的功能性、交互性和视觉一致性。本文系统梳理了…...