自定义指令跟组件一样,也是有生命周期的,我们的操作都是定义在对应的生命周期中,然后进行操作的,然后通过钩子函数传参进行绑定事件等等(先了解下)
这里七个钩子函数,钩子函数中有回调参数,回调参数有四个,含义基本上和 Vue2 一致:
el:指令所绑定的元素,可以用来直接操作 DOM(可以进行事件绑定)。
binding:我们通过自定义指令传递的各种参数
vnode:Vue 编译生成的虚拟节点。
oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。
在每个 vue 组件中,可以在 directives 节点下声明私有自定义指令。示例代码如下:
- <script>
- export default {
- directives: {
- // 自定义私有指令focus,在使用的时候要用 v-focus 。
- focus: {
- mounted(el, binding, vnode) => {
- //el是对应的dom,可以通过el给对应添加事件监听 el.addEventListener
- // binding.value 就是通过 = 绑定的值,在传值的时候传到这 binding.value
- //vnode是节点
- }
- },
- },
- }
- </script>
在使用自定义指令时,需要加上 v- 前缀。示例代码如下:
-
- <input v-focus/>
全局共享的自定义指令需要通过“单页面应用程序的实例对象”进行声明,示例代码如下:
- import { createApp } from 'vue'
-
- const app = createApp({
- /* ... */
- })
-
- // 注册(对象形式的指令)
- app.directive('my-directive', {
- /* 自定义指令钩子 */
- mounted(el, bindings) {
-
- }
-
- })
-
- // 注册(函数形式的指令)
- app.directive('my-directive', (el, binding, vnode) => {
- //el是对应的dom,可以通过el给对应添加事件监听 el.addEventListener
- // binding.value 就是通过 = 绑定的值,在传值的时候传到这 binding.value
- //vnode是节点
- })
在使用自定义指令时,需要加上 v- 前缀。示例代码如下:
-
- <input v-focus/>