自定义指令

199 阅读1分钟
全局注册(main.js)

Vue提供了一个directive方法给我们注册自定义指令,我们在main.js中注册一个全局的自定义指令

Vue.directive("resize", {
    bind() {},
    inserted() {},
    update() {},
    componentUpdated() {},
    unbind() {},
});
局部注册(main.js)

如果自定义指令不是每个组件都会用到的话,我们一般局注册自定义指令就好了

directives: {
    resize: {
        bind() {},
        inserted() {},
        update() {},
        componentUpdated() {},
        unbind() {},
    }
}

Vue提供了一个directives选项供我们注册自定义指令,它与data、methods同级别,上段代码中 我们注册了一个名叫resize的自定义指令,该指令只允许在组件内部使用

注意:全局注册指令使用的是directive,局部注册指令使用的是directives,很好理解,局部指令一次性注意注册很多个, 全局指令依次只能注册一个

自定义指令参数详解以及钩子函数介绍

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

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

  • update: 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。 但是你可以通过比较更新前后的值来忽略不必要的模板更新

  • componentUpdated: 指令所在组件的 VNode及其子 VNode全部更新后调用

  • unbind: 只调用一次,指令与元素解绑时调用

钩子函数顺序:指令绑定到元素时(bind)、元素插入时(inserted)、组件更新时(update)、组件更新后(componentUpdated)、 指令与元素解绑时(unbind)