1、私有指令语法:

directives:{
    'focus(指令名称)':{
      bind(el) {},
      inserted(el,binding){},
      updated(el) {},
    },
}

 引用方式:

<input type="text" v-model="id" name="id" v-focus>

注意:在定义的时候,指令的名称前面,不需要加 v- 前缀,但是,在调用的时候,必须 在指令名称前 加上 v- 前缀来进行调用

 2、 钩子函数,只介绍常用

bind

只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

和style有关的操作,最好在bind中去执行

inserted

被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

和JS行为有关的操作,最好在 inserted 中去执行,否者 JS行为不生效

update当VNode更新的时候,会执行 updated, 可能会触发多次

3、钩子函数参数,只介绍常用

  • el:指令所绑定的元素,可以用来直接操作 DOM 。
  • binding:一个对象,包含以下属性:
    • name:指令名,不包括 v- 前缀。
    • value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2
    • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    • expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"

4、实例

  • v-color指令定义:
directives:{
    'color':{
      bind(el) {
        el.style.color='red'
      },
},

或 

directives:{
    'color':{
      bind(el,binding) {
        el.style.color=binding.value
      },
},
  • v-color指令引用:
<input type="text" v-model="id" name="id" v-color>

<input type="text" v-model="id" name="id" v-color="'green'">

 

  • 效果

 

 

Logo

前往低代码交流专区

更多推荐