【Vue】自定义指令
hello,我是小索奇,精心制作的Vue系列持续发放,涵盖大量的经验和示例,如果对您有用,可以点赞收藏哈~
自定义指令
自定义指令就是自己定义的指令,是对 DOM 元素进行底层操作封装 ,程序化地控制 DOM,拓展额外的功能
全局定义
Vue.directive(指令名字, definition)
- 指令名:不包括v-前缀,使用时候包括v-,v-指令名
- definition: 对象,包含指令逻辑
// definition 就代表下面的函数,
Vue.directive('focus', function(el, binding) {// el 是绑定的 DOM 元素
})
局部定义
new Vue({directives: {'focus': {}}
})directives: {
// 直接写成函数形式,部分细节问题会处理不了focus(el, binding) {}
}
指令definition对象可以访问以下参数:
- el: 指令绑定的DOM元素,可以直接操作
- binding: 对象,包含指令信息
- name: 指令名
- value: 指令绑定的值
- expression: 绑定表达式字符串
- arg: 参数
- modifiers: 修饰符
- vnode: Vue编译的虚拟节点
- oldVnode: 之前的虚拟节点
示例1
创建一个自定义指令
<p v-color>鼠标悬停我,我会变色!</p>
在这里,v-color 就是我们的自定义指令它的名字是由我们来决定的,这个名字后面我们会用到
创建自定义指令的逻辑
<script>directives: {// 写成对象形式,可以定义更多函数color: {bind(el,binding) {console.log(el)console.log(binding)el.addEventListener('mouseover', () => {el.style.color = 'red'; // 鼠标悬停时变红色});el.addEventListener('mouseout', () => {el.style.color = ''; // 鼠标移出恢复原色});}}
}
</script>
在 bind 钩子函数和其他一些钩子函数中,el 是HTMLElement真实DOM元素一个必传参数,表示绑定了指令的 DOM 元素我们可以通过操作 el 来修改元素的样式、属性等
binding 是一个包含了指令相关信息的对象
我们告诉Vue当使用 v-color 指令时,应该执行的逻辑是:当鼠标悬停在元素上时,把文字变成红色;当鼠标移出时,恢复原来的颜色
我们已经在模板中使用了自定义指令 v--color,Vue会自动找到这个指令,并且执行我们之前定义的逻辑

el就代表绑定的元素,这里绑定的是h1

value是什么?
当我给v-color制定值的时候,它就出现了,所以binding.value就是我们绑定的value



示例2
<button @click="n++">点我n+1</button>
// 如果指令名有多个字母组成,要求使用烤肉串方式,如:v-focus-bind,相应的key应该加上引号
<input type="text" v-fbind:value="n">directives: {//函数是在 1.指令第一次绑定到元素时触发2.指令所在的模板被重新解析时触发// fbind(element,binding){// },// 写成对象形式,对象中可以定义更多函数,也可以写更多细节fbind:{//指令与元素成功绑定时,一上来立即会被调用,和函数形式调用时机一样fbind(){}bind(el,binding){el.value = binding.value},//指令所在元素被插入页面时inserted(el,binding){el.focus()},//指令所在的模板被重新解析时update(el,binding){el.value = binding.value}}}
全局形式
Vue.directive('fbind',{bind(element,binding){element.value = binding.value},inserted(element,binding){element.focus()},update(element,binding){element.value = binding.value}

定义成函数形式,相当于对象中的bind和update,没有inserted的简写,如需要更多细节操作可以定义对象形式
拓展钩子函数
Vue 自定义指令的常见钩子函数包括:
bind: 指令第一次绑定到元素时触发inserted: 元素被插入到父元素时触发update: 指令所在的模板被重新解析时触发componentUpdated: 组件更新完成时触发unbind: 指令与元素解绑时触发
这些钩子函数名称是 Vue 所识别的,如果我们在自定义指令中使用这些名称,Vue 就会在相应的时机调用我们的指令逻辑

相关文章:
【Vue】自定义指令
hello,我是小索奇,精心制作的Vue系列持续发放,涵盖大量的经验和示例,如果对您有用,可以点赞收藏哈~ 自定义指令 自定义指令就是自己定义的指令,是对 DOM 元素进行底层操作封装 ,程序化地控制 DOMÿ…...
MFC 中创建并显示二维码
1.创建并显示 QRcode* pQR_Encode; pQR_Encode QRcode_encodeString("12345678901234567890", 0, QR_ECLEVEL_H, QR_MODE_8, 1); if (pQR_Encode) { int nBmpWidth pQR_Encode->width; //获取控件的边界大小 CRect rect; Ge…...
NX二次开发UF_CAM_set_clear_plane_tag 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_set_clear_plane_tag Defined in: uf_cam_planes.h int UF_CAM_set_clear_plane_tag(tag_t object_tag, tag_t target_tag ) overview 概述 Set the tag of a clearance pl…...
计算机网络:数据链路层
0 本节主要内容 问题描述 解决思路 1 问题描述 数据链路层主要面临四个问题: 封装成帧;透明传输;差错检测;实现相邻节点之间的可靠通信。 1.1 子问题1:封装成帧 怎么知道数据从哪里开始?到哪里结束&a…...
电线电缆行业生产管理怎么数字化?
行业介绍 随着市场环境的变化和现代生产管理理念的不断更新,电缆的生产模式也在发生转变,批量小,规格多,交期短的新型制造需求逐年上升,所以企业车间管理的重要性越发凸显,作为企业良性运营的关键…...
计算机网络之数据链路层
一、概述 1.1概述 物理层发出去的信号需要通过数据链路层才知道是否到达目的地;才知道比特流的分界线 链路(Link):从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点数据链路(Data Link):把实现通信协议的硬件和软件…...
前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 系列文章(目录)
系列文章目录 第一章 技术栈简介 (开篇) 第二章 环境部署 (Node等环境安装) 第三章 项目创建 (Vite项目初始化) 第四章 认识项目目录 (项目整体介绍) 第五章 组件库安装和使用(Element-Plus基础配置) 第六章 样式格式化 (Sass配置) 第七章 路由配置 (vue-router深入解读) 第八…...
uniapp 给小程序添加分享功能
在 Uni-app 中,要为小程序添加分享功能,你可以通过使用小程序的自定义分享组件或通过配置页面的分享信息来实现。下面我将分别介绍这两种方法。 方法一:使用小程序的自定义分享组件 在小程序中,你可以创建一个自定义的分享组件&…...
npm命令
node -v --查看版本 npm install --安装npm npm config get registry --查看npm当前镜像 npm config set registry https://registry.npmmirror.com --设置淘宝镜像 npm版本管理工具...
Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)
文章目录 文章专栏前言文章解读前言创建ROI案例1:直接截取ROI手动截取ROI 总结ROI套路获取窗口句柄截取ROI区域获取有效区域 Stop组合 文章专栏 Halcon开发 Halcon学习 练习项目gitee仓库 CSDN Major 博主Halcon文章推荐 前言 今天来看第三章内容,既然是…...
以太坊铭文聚合交易平台 Scorpio,铭文爆发的新推手?
在今年 3 月,Ordinals 凭空问世,定义了一套在比特币网络运行的序数协议,使得 Token 和 NFT 能在比特币网络上实现并稳定运行,拉来了比特币铭文市场的新序幕。而在此后,在包括 BRC20 等在内的一系列应用的出现ÿ…...
Socket通信之网络协议基本原理
一台机器将自己想要表达的内容,按照某种约定好的格式发送出去,当另外一台机器收到这些信息后,也能够按照约定好的格式解析出来,从而准确、可靠地获得发送方想要表达的内容。这种约定好的格式就是网络协议(Networking P…...
linux 开发板以太网通过Ubuntu上外网方法
在开发板嵌入式设备,有一个mgbe网卡,用网线与连接soc的网卡,和外接网卡,将网卡usb接口插入电脑,选择接入到Ubuntu系统 在Ubuntu将能识别到这个外接网卡,这样就可以通过Ubuntu和soc通讯了, 如下…...
DependencyProperty.Register:wpf 向别的xaml传递参数
一.使用背景:在A.xaml中嵌入B.xaml,并且向B.xaml传递参数。 函数介绍: public static DependencyProperty Register(string name, Type propertyType, Type ownerType );name(string): 依赖属性的名称。在…...
uvm白皮书练习_ch2_ch231_加入transaction
2.3 为验证平平台加入各种组件 uvm白皮书练习_ch2_ch231_加入transaction 代码部分 top_tb.sv timescale 1ns / 1ps include "uvm_macros.svh"import uvm_pkg::*; /*只能现在*/include "my_if.sv" include "my_transaction.sv" include "…...
python-泛型实现,类型检查
python-泛型实现,类型检查 泛型类型泛型类 在Python中,没有像Java中的泛型那样的明确语法来指定类型参数。Python是一种动态类型语言,可以灵活地处理不同类型的对象。 然而,如果你希望在Python中添加泛型的注释或提示,…...
黑马React18: Redux
黑马React: Redux Date: November 19, 2023 Sum: Redux基础、Redux工具、调试、美团案例 Redux介绍 Redux 是React最常用的集中状态管理工具,类似于Vue中的Pinia(Vuex),可以独立于框架运行 作用:通过集中管理的方式管…...
visionOS空间计算实战开发教程Day 5 纹理和材质
在Day 4中我们使用了ImmersiveSpace并在其中添加了一个立方体,但对这个立方体我们只配置了长宽高,并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将ImmersiveView分拆…...
低代码PaaS开发平台
目录 一、低代码概念 低代码目的 低代码核心功能 二、PaaS平台 PaaS服务的低代码平台 1.私有化部署,为数据安全保驾护航 2.业内领先技术,为开发强势赋能 3.超强集成能力,系统对接无忧 4.源代码交付,实现二开自由 三、小结 一、低代…...
阿里云99元服务器ECS经济型e实例性能如何?测评来了
阿里云服务器优惠99元一年,配置为云服务器ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘,CPU采用Intel Xeon Platinum架构处理器,2.5 GHz主频,3M带宽下载速度384KB/秒,上传速度1028KB/秒&am…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
