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