Vue3 – 自定义指令 directives

简介

Vue 自带的指令有非常多,比如 v-if 、v-show.这些都是Vue自带给我们使用的指令。

Vue 还提供了用户自定义指令的方法,用户可以自定义创建指令,自定义指令方法。

本文讲解在Vue3中如何使用自定义指令的方法。

 

在模板中使用directives

在Vue3中,自定义指令提供了在模板中使用的功能,即可以在单个组件的setup方法中定义directives,规则是在指令名前加小写“v”作为标记,如下代码:

<script setup>
// 在模板中启用 v-focus
const vFocus = {
  mounted: (el) => el.focus()
}
</script>

<template>
  <input v-focus />
</template>

 

 

通过directives选项注册自定义指令

通过在组件中,创建一个directives属性,在里面定义自定义指令也可以

export default {
  setup() {
    /*...*/
  },
  directives: {
    // 在模板中启用 v-focus
    focus: {
      /* ... */
    }
  }
}

 

 

全局注册自定义指令

在某些情况下,这个指令我们可能需要在大多数组件中复用,这时我们可以把directives注册成全局自定义指令

const app = createApp({})

// 使 v-focus 在所有组件中都可用
app.directive('focus', {
  /* ... */
})

 

 

指令钩子方法

当某个元素被加上自定义指令后,这个元素的不同阶段,都会被自定义指令所捕获。通过处理不同情况下的状态,来决定元素在不同状态下该如何处理业务逻辑。

created

作用;

1.在绑定元素的 attribute 前
2.或事件监听器应用前调用

案例:

const myDirective = {
  created(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

 

beforeMount

在元素被插入到 DOM 前调用

const myDirective = {
  beforeMount(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

mounted

在绑定元素的父组件

及他自己的所有子节点都挂载完成后调用

const myDirective = {
  mounted(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

 

beforeUpdate

绑定元素的父组件更新前调用

const myDirective = {
  beforeUpdate(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

 

updated

在绑定元素的父组件

及他自己的所有子节点都更新后调用

const myDirective = {
  updated(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

 

beforeUnmount

绑定元素的父组件卸载前调用

const myDirective = {
  beforeUnmount(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

 

unmounted

绑定元素的父组件卸载后调用

const myDirective = {
  unmounted(el, binding, vnode, prevVnode) {
    // 下面会介绍各个参数的细节
  }
}

 

 

提供参数说明

el:指令绑定到的元素。这可以用于直接操作 DOM。即应用在那个元素,那么el则是该元素对象

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。

prevVnode:代表之前的渲染中指令所绑定元素的 VNode。仅在 beforeUpdate 和 updated 钩子中可用。

 

案例

<div v-example:foo.bar="baz">

如果在元素中调用如上代码的自定义指令,

则binding 参数会是一个这样的对象:

{
  arg: 'foo',
  modifiers: { bar: true },
  value: /* `baz` 的值 */,
  oldValue: /* 上一次更新时 `baz` 的值 */
}

 

在组件中使用

当在组件上使用自定义指令时,它会始终应用于组件的根节点

<MyComponent v-demo="test" />

 

<!-- MyComponent 的模板 -->

<div> <!-- v-demo 指令会被应用在此处 -->
  <span>My component content</span>
</div>

需要注意的是组件可能含有多个根节点。当应用到一个多根组件时,指令将会被忽略且抛出一个警告。和 attribute 不同,指令不能通过 v-bind="$attrs" 来传递给一个不同的元素。总的来说,不推荐在组件上使用自定义指令。

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Vue3 – 自定义指令 directives
简介 Vue 自带的指令有非常多,比如 v-if 、v-show.这些都是Vue自带给我们使用的指令。 Vue 还提供了用户自定义指令的方法,用户可以自定义创建指令,自定义指令方法。 本文讲解在Vue3中如何……
<<上一篇
下一篇>>