Vue自定义指令
            
            
                 
                    将一个自定义指令全局注册到应用层级也是一种常见的做法:
| 1 | const app = createApp({}) | 
一个指令的定义对象可以提供几种钩子函数 (都是可选的):
| 1 | // vue2.x | 
- el:指令绑定到的元素。这可以用于直接操作 DOM。
- binding:一个对象,包含以下属性。- value:传递给指令的值。例如在- v-my-directive="1 + 1"中,值是- 2。- oldValue:之前的值,仅在- beforeUpdate和- updated中可用。无论值是否更改,它都可用。- arg:传递给指令的参数 (如果有的话)。例如在- v-my-directive:foo中,参数是- "foo"。- modifiers:一个包含修饰符的对象 (如果有的话)。例如在- v-my-directive.foo.bar中,修饰符对象是- { foo: true, bar: true }。- instance:使用该指令的组件实例。- dir:指令的定义对象。
- vnode:代表绑定元素的底层 VNode。
- prevNode:之前的渲染中代表指令所绑定元素的 VNode。仅在- beforeUpdate和- updated钩子中可用。
除了 el 外,其他参数都是只读的,不要更改它们。若你需要在不同的钩子间共享信息,推荐通过元素的 dataset attribute 实现。
简化形式
对于自定义指令来说,一个很常见的情况是仅仅需要在 mounted 和 updated 上实现相同的行为,除此之外并不需要其他钩子。这种情况下我们可以直接用一个函数来定义指令,如下所示:
| 1 | <div v-color="color"></div> | 
| 1 | app.directive('color', (el, binding) => { | 
例子:tab切换
| 1 | // tab.vue | 
| 1 | // src/directives/tab.js | 
| 1 | // src/directives/index.js | 
| 1 | // main.js | 
使用场景:
- 按钮权限 v-has
- 图片懒加载 v-lazy
- 防抖 V-debounce
- 拖拽指令 v-draggable mousemove. mouseup monsedown.dragenter、dragover、drop。
- Post title: Vue自定义指令
- Create time: 2022-01-21 16:35:00
- Post link: 2022/01/21/自定义指令/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
         Comments