首页 > 其他分享 >Vue2x的自定义指令

Vue2x的自定义指令

时间:2023-09-11 11:24:40浏览次数:43  
标签:function el 绑定 自定义 Vue2x vnode 指令 bindings

在某些情况下,我们需要对底层DOM进行操作,而内置的指令不能满足需求,就需要自定义指令。一个自定义指令由一个包含类似组件的生命周期的钩子的对象来定义,钩子函数会接收到指令所绑定的元素作为参数。

定义指令

常用两种方式进行自定义指令,一种是全局定义,另一种在当前组件中定义

// 局部定义
export default {
  directives: {
    focus: {
	    bind: function(el, bindings, vnode) {/* ... */},
		inserted: function(el, bindings, vnode) { el.focus(); },
		update: function(el, bindings, vnode) { /* ... */ },
		componentUpdated: function(el, bindings, vnode) { /* ... */ },
		unbind: function(el, bindings, vnode) { /* ... */ }
    }
  }
};

// 全局定义
const app = createApp({});
// 使 v-focus 在所有组件中都可用
app.directive("focus", {
	bind: function(el, bindings, vnode) {/* ... */},
	inserted: function(el, bindings, vnode) { el.focus(); },
	update: function(el, bindings, vnode) { /* ... */ },
	componentUpdated: function(el, bindings, vnode) { /* ... */ },
	unbind: function(el, bindings, vnode) { /* ... */ }
});

// 全局和局部的调用方式相同
<input v-focus>

钩子函数

钩子函数就是拦截模块渲染流程的“挂钩”,在不同的节点拦截或监听事件,以完成自定义指令的操作。五种钩子拦截的事件分别是初始化、插入节点、渲染完成,监听绑定值的变化和销毁节点。

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:节点第一次插入到父节点(页面)中会触发,只会触发这一次.
  • update:当前元素渲染完成,绑定的值发生改变的时候触发
  • componentUpdated:当前元素所在的区域全部渲染完成,绑定的额值发生改变时触发。
  • unbind:只调用一次,指令与元素解绑时调用。(比如离开页面或销毁组件等)

钩子参数

钩子参数即绑定到钩子函数上的参数

  • el:指令绑定到的元素。这可以用于直接操作 DOM。
  • binding:一个对象,包含以下属性。
    • value:传递给指令的值。例如在 v-my-directive="1 + 1" 中,值是 2。
    • oldValue:修改前的值,仅在 beforeUpdate 和 updated 中生效。无论是否修改都可以访问。
    • arg:传递给指令的参数 (如果有的话)。例如在 v-my-directive:foo 中,参数是 "foo"。
    • modifiers:一个包含修饰符的对象 (如果有的话)。例如在 v-my-directive.foo.bar 中,修饰符对象是 { foo: true, bar: true }
    • instance:使用该指令的组件实例。
    • dir:指令的定义对象。
  • vnode:代表绑定元素的底层 VNode。
  • prevNode:代表之前的渲染中指令所绑定元素的 VNode。仅在 beforeUpdate 和 updated 钩子中可用。

传递参数

传递钩子参数的方式有如下几种

  1. 实例化一个指令,但没有参数 v-xxx。例如上面提到的 v-focus
  2. 传递值的指令 v-xxx="value"。value 值是变量,一般会绑定到 bingdings 的 value 上
  3. 传递字符串的指令 v-xxx="'string'",例如 v-html="'<p>Content</p>'"
  4. 传递参数的指令 v-xxx:arg1=value1,值arg1和value1分别绑定到bingdings的arg和value
  5. 传递动态参数的指令 v-xxx:[arg]=value1,变量 arg 可以实现动态指令参数
  6. 使用修饰符(modifier)的指令 v-xxx:arg.m1="value",m1会被绑定到 bingdings的modifier上。允许多个修饰符用逗号连接绑定。例如 a.b.c 对应的是{a:true,b:true,c:true}

函数简写

在很多时候,你可能想在 bind 和 update 时触发相同行为,而不关心其它的钩子。比如这样写:

Vue.directive('color-swatch', function (el, binding) {  
	el.style.backgroundColor = binding.value  
})

对象字面量

如果指令需要多个值,可以传入一个 JavaScript 对象字面量。记住,指令函数能够接受所有合法的 JavaScript 表达式

<div v-demo="{ color: 'white', text: 'hello!' }"></div>

标签:function,el,绑定,自定义,Vue2x,vnode,指令,bindings
From: https://www.cnblogs.com/libera/p/17692904.html

相关文章

  • SpringBoot + 自定义注解,实现用户操作日志(支持SpEL表达式)
    背景一个成熟的系统,都会针对一些关键的操作,去创建用户操作日志。比如:XX人创建了一条订单,订单号:XXXXXXXXX因为操作人或者订单号是动态的,所以有些开发人员,不知道获取,就将这种操作日志和业务代码融在一起。我们当然要杜绝这种现象,一定会有更好的解决方案。当前项目除了......
  • MySQL数据库进阶 自定义函数
    自定义函数在MySQL中,您可以使用自定义函数来扩展数据库管理系统的功能。自定义函数允许您封装一段可重用的代码,并在查询和其他操作中调用它。以下是在MySQL中创建和使用自定义函数的一般步骤:1、创建自定义函数语法:CREATEFUNCTIONfunction_name(parameters)RETURNSreturn_t......
  • Vue学习一:vue2的基本指令
    Vue是一个构建用户界面的渐进式框架。官网:https://cn.vuejs.org/。Vue可以用网上的CDN,也可以下载到本地(下载的话就是进入官网打开学习文档,点击基础里面的安装,点击里面的开发版本这几个字,建议下载开发版本,里面包含完整的警告和调试模式)1、创建Vue2实例首先将下载的vue.js引入到h......
  • ES运维常见的十个故障诊断指令汇总
    文章目录1、查询分配未分配的原因1.1问题场景描述1.2诊断方式1.3解决方案1.4所有12种分片未分配原因汇总2、查询集群的健康状况2.1健康状态2.2查看状态信息3、查看集群中所有节点的节点属性3.1常见使用场景4、查看集群中所有节点的分配信息4.1常见使用场景5、查询集群/......
  • jeecgboot 自定义导出字段
    实体类@DatapublicclassCostimplementsSerializable{/**主键*/@ApiModelProperty(value="主键")privateStringid;/**日期*/@Excel(name="日期",format="yyyy-MM-dd")@JsonFormat(timezone="GMT+8......
  • idea自定义TODO接口
    设置搜索TODO取消默认勾选的颜色选择自定义的颜色......
  • conda 常用指令
    创建环境condacreate--namexxxpython=3.7激活环境condaactivatexxxcondadeactivate#退出环境删除环境condaremove--namexxx--all其他condaenvlist#查看当前所有环境condalist#在当前环境下查看所有包condaconfig--show-sources#查看当前使用源......
  • 表单引擎的自定义控件的概念与设计
    基本概念概述控件的定义:用于展示或者采集数据的表单元素,称为控件,比如:文本框、下拉框、单选按钮、从表等.自定义控件:表单引擎提供的基础控件之外的控件称为自定义控件,这些控件由开发人员自己定义,比如:评分、公文字号、定位等.基本控件分类字段控件:文本字段、数值字段、日期字段、......
  • 基于live555开源流媒体服务器开发的EasyRTSPServer实现自定义数据与音视频数据的同步
    基于live555开源流媒体服务器开发的EasyRTSPServer实现的是视频和音频的数据传输,而随着智能分析的应用越来越多,如何将分析结果传给客户端也势在必行了。分析问题EasyRTSPServer基于live555改造而来,通过分析代码可以知道,其实它已经自带了metadata的传输.我们要做的就是怎样将这个me......
  • RTSP流媒体服务器EasyNVR在直播项目中如何自定义直播背景音乐
    TSINGSEE青犀视频开发的平台主要用于安防直播,除了在安防领域的应用外,也已经成功落地于许多其他领域,包括景区直播。在普通的安防直播场景中,对于视频监控背景音乐并没有特别的要求。然而,对于景区来说,监控的目的不仅限于安防,还包括向外界展示和宣传。因此,在景区直播中,可以结合背景音乐......