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

Vue 2自定义指令入门

Vue 2自定义指令入门

Vue自定义指令允许我们在DOM元素上添加自己想要的行为来扩展Vue的功能。

一个自定义指令需要一个名称和一个定义对象。在定义对象中,你可以使用一些钩子函数来控制指令的行为:

  1. bind:在指令被绑定到元素上时使用,只调用一次。可以用来初始化一些值。
  2. inserted:在被绑定元素插入父节点时调用。可以用来执行初始的DOM操作,比如设置焦点/绑定事件。
  3. update:在被绑定元素的值更新时调用,无论绑定值是否改变。可以用来响应值的更新。可能发生在其子VNode更新之前。
  4. componentUpdated:指令所在组件的VNode及其子VNode全部更新后调用。
  5. unbind:指令与元素解绑时调用,清除绑定的一些事件监听器。

下面给出一个简单的示例:

<!DOCTYPE html>
<html><head><title>Vue Custom Directive Demo</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head><body><div id="app"><input v-model="colorValue" v-change-color  style="width: 50px;"  /></div><script>Vue.directive('change-color', {inserted: function (el) {el.addEventListener('input', function () {el.style.color = el.value})}})var vm = new Vue({el: '#app',data: {colorValue: 'black'}});</script>
</body></html>

在这里插入图片描述


Vue自定义指令的钩子函数接受一些参数,这些参数提供了有关指令的上下文信息及对应的DOM元素:

  1. bind(el,binding,vnode):
    • el:绑定指令的元素。
    • binding:一个对象,包含以下属性:
      • name:指令名称,不包括v-前缀。
      • value:指令的绑定值,可以是一个表达式或变量。
      • oldValue:指令之前的绑定值。
      • expression:绑定值的表达式字符串形式。
      • arg:指令参数,例如v-my-directive:arg中的arg。
      • modifiers:修饰符对象,例如v-my-directive.modifier1.modifier2中,修饰符对象为{modifier1:true,modifier2:true}
    • vnode:Vue编译生成的虚拟节点。
  2. inserted(el,binding,vnode)
  3. update(el,binding,vnode,oldVnode):
    • oldVnode:之前的虚拟节点,用于比较更新。
  4. componentUpdated(el,binding,vnode,oldVnode)
  5. unbind(el,binding,vnode)

我们也可以使用v-my-directive:[arg]="value"的形式来使用动态参数。

<!DOCTYPE html>
<html><head><title>Vue Custom Directive with Dynamic Argument</title><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head><body><div id="app"><p v-mydirective:[arg1]>Hello World</p></div><script>Vue.directive('mydirective', {bind: function(el, binding, vnode) {console.log(binding.arg);el.style[binding.arg] = '5px solid red';}});var vm = new Vue({el: '#app',data: {arg1: 'border'}});</script>
</body></html>

在这里插入图片描述


bind和update的函数简写

同时定义bind和update而不考虑其他钩子函数:

Vue.directive('mydirective',function(el,binding){//...
})
http://www.lryc.cn/news/128521.html

相关文章:

  • 【Sklearn】基于AdaBoost算法的数据分类预测(Excel可直接替换数据)
  • Docker+Selenium Grid搭建自动化测试平台
  • Django图书商城系统实战开发-总结经验之后端开发
  • LeetCode[1288]删除被覆盖区间
  • QT connect使用简单介绍
  • 【云原生】kuberneter中Helm入门到实践
  • 编译鸿蒙codelabs安装时报错
  • 设计模式
  • 用gdal库读取tif影像并填充边缘,并根据窗口大小滑动裁剪裁剪(包含gdal转PIL)
  • sqlserver数据库导出到mysql
  • 【抓包工具】whistle抓包工具分享
  • docker可视化工具Portainer
  • 售后服务管理系统哪家好?云部署的售后服务软件有什么优势?
  • laravel-admin之 解决上传图片不显示 $form->image(‘image‘); 及 $grid->column(‘image‘);
  • 运营商三要素 API:构建安全高效的身份验证系统
  • 使用 BERT 进行文本分类 (01/3)
  • layui第三方组件cron的使用
  • Linux 信号的基本概念
  • 神经网络基础-神经网络补充概念-31-参数与超参数
  • C# Linq源码分析之Take (二)
  • FPGA控制RGB灯WS2812B
  • 【Linux】【驱动】应用层和驱动层传输数据
  • 【第二阶段】kotlin函数引用
  • sip网络号角喇叭 sip音柱 POE供电广播音箱 ip网络防水对讲终端 sip网络功放
  • 【网络】传输层——TCP(滑动窗口流量控制拥塞控制延迟应答捎带应答)
  • Electron教程_编程入门自学教程_菜鸟教程-免费教程分享
  • LVS负载均衡DR(直接路由)模式
  • 14 anaconda+pycharm环境管理以及源管理
  • 【C语言程序设计】C语言基本数据类型与表达式(思考题)
  • Linux 网络发包流程