vue2 vs vue3自定义指令

目录

什么是指令?

指令的作用是什么呢?

vue中常用的v-指令有那些呢?

自定义指令中传递的三个参数

自定义指令的生命周期

总结:

vue3 自定义指令的变化 


什么是指令?

在vue中提供了一些对于页面 + 数据的更为方便的输出,这些操作就叫做指令, 以v-xxx表示
类似于html页面中的属性 <div v-xxx ></div>

指令的作用是什么呢?

指令中封装了一些DOM行为, 结合属性作为一个暗号, 暗号有对应的值,根据不同的值,框架会进行相关DOM操作的绑定

vue中常用的v-指令有那些呢?
  1. v-text 元素的InnerText属性,必须是双标签
  2. v-html 元素的innerHTML
  3. v-if 判断是否插入这个元素
  4. v-else-if
  5. v-else
  6. v-show 隐藏元素 如果确定要隐藏, 会给元素的style加上display:none
  7. v-model 对于输入框实现数据的双向绑定
自定义指令中传递的三个参数
  1. el: 指令所绑定的元素,可以用来直接操作DOM。
  2. binding: 一个对象,包含指令的很多信息。
  3. vnode: Vue编译生成的虚拟节点。
自定义指令的生命周期

自定义指令有五个生命周期(也叫钩子函数),分别是 bind,inserted,update,componentUpdated,unbind

  1. bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
  2. inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
  3. update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
  4. componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
  5. unbind:只调用一次,指令与元素解绑时调用。
bind:()=>{//被绑定
    console.log('1 - bind');
},

inserted:()=>{//绑定到节点
    console.log('2 - inserted');
},

update:()=>{//组件更新
    console.log('3 - update');
},

componentUpdated:()=>{//组件更新完成
    console.log('4 - componentUpdated');
},

unbind:()=>{//解绑
    console.log('5 - bind');
}
总结:
  • 自定义指令的命名规则是什么?
  • 自定义指令的生命周期(钩子函数)有那些?什么时候会被调用?
  • 钩子函数的参数有那些?
vue3 自定义指令的变化 

每一个钩子函数中,参数的变化: 

  • el: 指令绑定的元素,可以用来直接操作DOM
  • binding: 数据对象,包含以下属性
  1. instance: 当前组件的实例,一般推荐指令和组件无关,如果有需要使用组件上下文ViewModel,可以从这里获取
  2. value: 指令的值。
  3. oldValue: 指令的前一个值,在beforeUpdate和Updated 中,可以和value是相同的内容。
  4. arg: 传给指令的参数,例如v-on:click中的click。
  5. modifiers: 包含修饰符的对象。例如v-on.stop:click 可以获取到一个{stop:true}的对象
  • vnode: Vue 编译生成的虚拟节点
  • prevVNode: Update时的上一个虚拟节点
  1. 在Vue 3中钩子函数的生命周期和组件的生命周期类似:
  2. created - 元素创建后,但是属性和事件还没有生效时调用。
  3. beforeMount- 仅调用一次,当指令第一次绑定元素的时候。
  4. mounted- 元素被插入父元素时调用.
  5. beforeUpdate: 在元素自己更新之前调用
  6. updated - 元素或者子元素更新之后调用.
  7. beforeUnmount: 元素卸载前调用.
  8. unmounted -当指令卸载后调用,仅调用一次
  9. 全局自定义指令的写法:
let app = createApp(App)
app.directive('highlight', {
  beforeMount(el, binding, vnode) {
    el.style.background = binding.value
   }
})

// 改变背景色

局部自定义指令的写法:

directives: {
highlight: {
  beforeMount(el, binding, vnode) {
     el.style.background = binding.value;
  },
},

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue.js是一种流行的JavaScript框架,用于构建用户界面。它提供了一种简洁的方式来处理数据和DOM的交互。在Vue.js中,自定义指令是一种扩展Vue.js功能的方式,可以用于在DOM元素上添加特定的行为。 在Vue.js 2中,自定义指令通过`Vue.directive`方法来定义。自定义指令可以用于操作DOM元素、监听事件、修改样式等。例如,我们可以创建一个自定义指令来实现点击元素时改变背景颜色的功能: ```javascript Vue.directive('change-color', { bind: function (el, binding) { el.addEventListener('click', function () { el.style.backgroundColor = binding.value; }); } }); ``` 在上面的例子中,我们使用`bind`钩子函数来绑定指令,并在元素上添加点击事件监听器。当点击元素时,会根据指令的值来改变元素的背景颜色。 而在Vue.js 3中,自定义指令的写法有所改变。Vue.js 3引入了`createApp`方法来创建应用程序实例,并使用`app.directive`方法来定义定义指令。例如,我们可以使用Vue.js 3的语法来重新实现上述的自定义指令: ```javascript const app = Vue.createApp({}); app.directive('change-color', { mounted(el, binding) { el.addEventListener('click', function () { el.style.backgroundColor = binding.value; }); } }); app.mount('#app'); ``` 在上面的例子中,我们使用`mounted`钩子函数来绑定指令,并在元素上添加点击事件监听器。当点击元素时,会根据指令的值来改变元素的背景颜色。 总结一下,Vue.js 2和Vue.js 3中的自定义指令定义方式有所不同,但都可以用于扩展Vue.js的功能,实现特定的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值