怎么在vue3.0中自定义指令

发布时间:2020-12-28 14:15:39 作者:Leah
来源:亿速云 阅读:263

今天就跟大家聊聊有关怎么在vue3.0中自定义指令,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

举个例子,你想让页面的文本框自动聚焦,在没有学习自定义指令的时候,我们可能会这么做。

const app = Vue.createApp({
 mounted(){
  this.$refs.input.focus();
 }, 
 template: `<input type="text" ref="input" />`,
});

在mounted钩子函数里,通过 $refs 获取需要聚焦的 DOM 元素,然后调用 focus 方法完成自动聚焦的功能。

基本使用

上面做法已经实现了我们需要的功能,但是假如说我们有多个组件都需要这个功能,那我们只能把这段代码复制过去,重新实现逻辑。我们下面看下如果使用自定义指令,应该怎么做。

const app = Vue.createApp({
 // 通过 v-[自定义指令名称] 绑定自定义指令
 template: `<input type="text" v-focus/>`,
});
// 注册一个全局自定义指令
app.directive('focus',{
 // 当被绑定的元素插入到DOM的时候执行..
 mounted(el){
  el.focus();
 }
})

如上,我们定义了一个全局自定义指令 focus,并通过 v-focus 绑定到需要聚焦的 input 元素上。如果,其他组件或模块也需要聚焦功能,只要简单的绑定此指令即可。

自定义指令的钩子函数

我们在上面定义指令的时候,会发现其中包含了 mounted 钩子函数,指令还提供了如下钩子函数,我们用代码的形式来给大家列出来。

app.directive('directiveName', {
 // 指令绑定元素挂载前
 beforeMount(el) {},
 // 指令绑定元素挂载后
 mounted(el, binding) {},
 // 指令绑定元素因为数据修改触发修改前
 beforeUpdate(el) {},
 // 指令绑定元素因为数据修改触发修改后
 updated(el) {},
 // 指令绑定元素销毁前
 beforeUnmount(el) {},
 // 指令绑定元素销毁后
 unmounted(el) {},
});

效果就不一一列举了,有兴趣大家可以尝试下分别触发这些钩子函数。指令钩子函数大部分与组件很类似,大家可以对比着来看。

动态指令参数

下面,我们再来看一个例子。

const app = Vue.createApp({
 template: `<div class="box" v-abs-top="num"  ></div>`,
});
// 在很多时候,你可能想在 mounted 和 updated 时触发相同行为,而不关心其它的钩子,就这样写
app.directive('absTop', (el) => {
 el.style[binding.arg] = '100px';
});

我们在 div 元素上绑定 absTop 指令,div 元素本身定位是 absolute,指令执行让绑定元素的 top 为 100px。这时候,我想在绑定指令的时候能够传一个参数,使得元素的 top 值可以根据参数来改变。代码如下:

const app = Vue.createApp({
 data() { return { num: 100 } },
 template: `<div class="box" v-abs-top="num"></div>`,
});
app.directive('absTop', (el, binding) => {
 el.style.top = binding.value + 'px';
});

元素可以通过 v-directive="value" 传入动态参数,指令通过钩子函数的第二个参数 binding.value 来接收参数。

如果其他元素可能不是修改 top 的值,有可能是 left、right 或者 bottom,那么指令可以动态指定吗?其实也是可以做到的。首先,我们修改模板为:

<div class="box" v-abs:left="num"></div>

然后修改指令本身

app.directive('absTop', (el, binding) => {
 el.style[binding.arg] = binding.value + 'px';
});

在 v-mydirective:[argument]="value" ,arguments 也是可以动态改变的,这样,就可以完美的实现上述要求了。

组件的使用

组件中绑定指令与 DOM元素绑定指令并没有什么不同,指令会获取组件的原生 根DOM 来操作。但是要注意的是,在 vue3.0 中,组件可能有多个根节点,指令绑定在多根节点组件是有问题的。

局部自定义指令

最后,再来简单说下局部自定义指令是怎么定义的。

const app = Vue.createApp({
directives: {
  focus: {
   // 指令的定义
   mounted(el) {
    el.focus()
   }
  }
 }
}

局部指令定义和全局指令基本一致,如上所示,在组件中定义 directives 就可以了。

看完上述内容,你们对怎么在vue3.0中自定义指令有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

推荐阅读:
  1. 怎么在vue2.0中自定义指令
  2. Vue3.0中Proxy怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vue3.0 ue

上一篇:str内置函数怎么在python中使用

下一篇:常见的Java后端面试题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》