vue3.0自定义指令,vue自定义指令详解

  vue3.0自定义指令,vue自定义指令详解

  本文主要介绍vue3自定义指令的细节。自定义指令分为全局和局部两种,大家都很熟悉。今天我们就来说说vue3中自定义指令的定义、使用和钩子功能的变化。有需要的朋友可以参考一下。

  

目录

  I、寄存器自定义指令1.1、全局自定义指令1.2、部分自定义指令2、自定义指令中的生命周期钩子函数3、自定义指令钩子函数的参数4、自定义指令的参数

  

一、注册自定义指令

  下面的例子都是自定义指令来实现一个输入框自动获得焦点。

  

1.1、全局自定义指令

  在Vue2中,全局自定义指令通过directive挂载在Vue对象上,使用Vue.directive(name ,opt)。

  实例1:Vue2全球定制说明

  Vue.directive(focus ,{

  已插入:(el)={

  焦点()

  }

  })

  Inserted是一个钩子函数,当绑定元素被插入到父节点时执行。

  在vue3中,vue的实例是由createApp创建的,所以全局自定义指令的挂载方式也发生了变化,指令挂载在App上。

  实例2:Vue3全球定制说明

  //全局自定义指令

  app.directive(focus ,{

  已安装(el){

  焦点()

  }

  })

  //组件用法

  输入类型=text v-focus /

  

1.2、局部自定义指令

  在组件内,指令的引入被称为本地自定义指令。Vue2和Vue3中自定义指令的引入是完全一样的。

  实例3:本地用户自定义指令

  脚本

  //本地自定义指令

  const defineDir={

  焦点:{

  已安装(el){

  焦点()

  }

  }

  }

  导出默认值{

  指令:defineDir,

  setup(){}

  }

  /脚本

  

二、自定义指令中的生命周期钩子函数

  指令定义对象可以提供以下钩子函数(所有这些函数都是可选的,可以根据需要引入)

  Created:在应用绑定元素属性或事件侦听器之前调用。当这个指令需要附加一个需要在普通v-on事件监听器之前调用的事件监听器时,这是很有用的。

  BeforeMounted:当指令第一次绑定到一个元素并在父组件被挂载之前执行时。

  Mounted:在绑定元素的父组件安装后调用。

  Before:在更新包含组件的VNode之前调用。

  Updated:在包含组件及其子组件的VNode更新后调用。

  BeforeUnmounted:在卸载绑定元素的父组件之前调用。

  Unmounted:当指令与元素解除绑定并且父组件被卸载时,它只被调用一次。

  实例3:测试指令中生命周期功能的执行

  模板

  差异

  输入类型=text v-focus v-if=showbr

  button @ click= Chang status { show?隐藏:显示 } } }/按钮

  /div

  /模板

  //本地自定义指令

  常量自动对焦={

  焦点:{

  已创建(){

  console . log( created );

  },

  beforeMount(){

  console . log( before mount );

  },

  已安装(el){

  console.log(mounted )。

  },

  更新之前(){

  console.log(更新前)

  },

  已更新(){

  console.log(“已更新”);

  },

  卸载之前(){

  console . log( before unmount );

  },

  卸载(){

  console . log( unmounted );

  }

  },

  }

  从“vue”导入{ ref }

  导出默认值{

  指令:自动对焦,

  setup(){

  const show=ref(true)

  返回{

  秀,

  changStatus(){

  show.value=!显示值

  }

  }

  }

  }

  通过点击按钮,我们发现在创建input元素时,会触发三个hook函数,created、beforeMount和mounted。

  当输入元素隐藏时,将触发beforeUnmount和Unmount。

  但是,我们添加的beforeUpdate和updated函数没有执行。

  此时,当我们将input元素上的v-if更改为v-show时,我们将执行上面的两个方法。具体执行情况我们自己会核实。

  从 vue2 升级到 vue3 ,自定义指令的生命周期钩子函数发生了改变,具体变化如下:

  bind函数已被替换为beforeMounted。

  更新已被删除。

  ComponentUpdated已替换为Updated。

  Unbind替换为unmounted。

  插入的已被删除。

  

三、自定义指令钩子函数的参数

  钩子函数被赋予了以下参数:

  El:指令绑定的元素可以直接操作DOM。

  Binding:是一个包含指令所有信息的对象。

  binding 包含的属性具体的分别为:

  arg自定义指令的参数名。

  自定义指令绑定的值。

  旧值指令绑定的前一个值。

  已执行目录挂钩功能

  修改器:包含修改器的对象。

  模板

  差异

  分区v-固定定位/分区

  /div

  /模板

  脚本

  //自定义指令的动态参数

  常量自动对焦={

  已修复:{

  安装前(el,binding){

  console.log(el ,el)

  console.log(binding ,binding)

  }

  }

  }

  导出默认值{

  指令:自动对焦,

  setup(){

  }

  }

  /脚本

  

四、自定义指令参数

  用户定义的指令也可以有参数,这些参数可以是动态的,可以根据组件实例数据实时更新。

  实例4:用户自定义指令动态参数

  模板

  差异

  div v-fixed:pos= pos data style= width:100px;高度:100px背景:灰色定位/格

  /div

  /模板

  脚本

  //自定义指令的动态参数

  常量自动对焦={

  已修复:{

  安装前(el,binding){

  el.style.position=fixed

  El . style . left=binding . value . left px

  El . style . top=binding . value . top px

  }

  }

  }

  导出默认值{

  指令:自动对焦,

  setup(){

  const posData={

  左:20,

  最高:200

  }

  返回{

  posData,

  }

  }

  }

  /脚本

  什么时候需要自定义指令?

  需要对普通DOM元素进行底层操作,然后会用到自定义指令。

  需要在指定的DOM元素上使用一些函数,但是当需要操作大量的DOM元素或者大的改动时,建议使用组件而不是指令。

  关于vue3自定义指令的细节这篇文章就到这里了。有关vue3自定义指令的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: