vue 自定义指令

vue2和vue3自定义指令有些差异,但在使用指令时都大差不差的。

1. vue2自定义指令

1.1 定义指令文件【directive.js】

 1 import Vue from "vue";
 2 const directive = {
 3   name:"title",
 4   bind(el,bind){
 5     // 指令第一次绑定到元素时调用
 6     // el:  绑定指令的dom节点
 7     // bind: 指令信息
 8   },
 9   inserted(el, bind) {
10     // 被绑定元素插入父节点时调用
11   },
12   update(el, bind) {
13     // 所在组件的 VNode 更新时调用,指令的值不一定发生了变化,可以通过比较bind里面的oldValue和value值,判断是否变化
14   },
15   unbind(el) {
16     // 销毁时执行
17     console.log(el);
18   },
19 }
20 Vue.directive("title",directive);
21 export default directive;

 

1.2 引用指令文件,并使用

 1 // js
 2 import title from './directive.js';
 3 export default {
 4     directive: [title],
 5     data(){
 6         return {
 7             value:"我是传给指令的值"
 8         }
 9     }
10 } 
11 
12 // html
13 <div v-title="value">指令的dom节点</div>
  // 可以自定义传其他的参数 v-directive:[arg]="value"
  <div v-title:argObj.name.age.tel="value">指令的dom节点</div>


打印对应的信息:

 

 

 

 

 

2. vue3自定义指令

vue3在使用指令时,跟vue2是一样的,都是:【v-directive:[arg]="value"】,而且钩子函数的参数都一样,但在定义时,钩子函数有点不同。

2.1 定义指令文件【directive.js】

 1 const directive = {
 2   // 在绑定元素的 attribute 前
 3   // 或事件监听器应用前调用
 4   created(el, binding, vnode, prevVnode) {
 5     
 6   },
 7   
 8   beforeMount(el, binding, vnode, prevVnode) {},
 9   // 在绑定元素的父组件
10   // 及他自己的所有子节点都挂载完成后调用
11   mounted(el, binding, vnode, prevVnode) {},
12   // 绑定元素的父组件更新前调用
13   beforeUpdate(el, binding, vnode, prevVnode) {},
14   // 在绑定元素的父组件
15   // 及他自己的所有子节点都更新后调用
16   updated(el, binding, vnode, prevVnode) {},
17   // 绑定元素的父组件卸载前调用
18   beforeUnmount(el, binding, vnode, prevVnode) {},
19   // 绑定元素的父组件卸载后调用
20   unmounted(el, binding, vnode, prevVnode) {}
21 }
22 export default directive

 

2.2 引用指令文件,并使用

当使用组合式使用setup时,即<script setup></script>,直接import引用指令文件即可,但切记,名称一定要v开头。

<script setup>
import vTitle from "./directive.js" // 必须使用v开头
</script>

// html
<div v-title="value">xxxxxx</div>

当使用选项式使用setup,即setup(){},则通过directives

<script>
import title from "./directive.js"
export default {
    directives:{
        title 
    }
}
</script>


// html
<div v-title="value">xxxxxx</div>

 

posted @ 2022-09-09 17:34  蛙仔  阅读(70)  评论(0编辑  收藏  举报