理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

作者:SpringSir 时间:2024-05-28 15:46:41 

Vue2.x用法

全局注册

Vue.directive( 指令名, { 自定义指令生命周期 } )

局部注册

directives: { 指令名, { 自定义指令生命周期 } }

使用

v-指令名: 属性名.修饰符=“value值”

理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

钩子函数

bind - 自定义指令绑定到 DOM 后调用. 只调用一次, 注意: 只是加入进了DOM, 但是渲染没有完成

inserted - 自定义指令所在DOM, 插入到父 DOM 后调用, 渲染已完成(最最重要)

update - 元素更新, 但子元素尚未更新, 将调用此钩子( 自定义指令所在组件更新时执行, 但是不保证更新完成 ) —> 和自定义所在组件有关

componentUpdated - 组件和子级更新后执行( 自定义指令所在组件更新完成, 且子组件也完成更新 ),

—> 和自定义所在组件有关

unbind - 解绑(销毁) .( 自定义指令所在 DOM 销毁时执行 ). 只调用一次

钩子函数的参数

注意: 自定义指令中, 都不能直接使用this

1.el: 当前指令所在的dom元素。

2.binding: 是一个对象, 表示当前指令上的属性、修饰符、value值等信息。只有value最重要, 常用

arg:String, 属性名 。例如 v-my-directive:foo 中,属性名为 “foo”。

modifiers:Object, 包含所有修饰符的一个对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。

name:String, 指令名,不包括 v- 前缀。

rawName, String, 完整指令名,例如 v-my-directive:foo.bar=“1 + 1” 中, 完整指令名就是 v-my-directive:foo.bar=“1 + 1”

value:Any, 指令绑定的当前值,例如:v-my-directive=“1 + 1” 中,绑定值为 2。(最最重要)

expression:String, 解析的哪一个值、表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。

oldValue:Any, 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。

oldArg:Any, 指令属性名的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。

3.vnode:当前节点信息, 可以获取, 当前指令所在组件的实例 vnode.context - 当前指令所在的实例对象

4.oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

Vue3.x用法

用法和 Vue2.x 一样

全局注册

Vue.directive( 指令名, { 自定义指令生命周期 } )

局部注册

directives: { 指令名, { 自定义指令生命周期 } }

使用

v-指令名: 属性名.修饰符=“value值”

以插件的形式, 进行全局注册

理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

钩子函数

较 Vue2.x 相比, 钩子函数有变化

最终的 API 如下:


const MyDirective = {
 created(el, binding, vnode, prevVnode) {}, // 新增
 beforeMount() {},
 mounted() {},
 beforeUpdate() {}, // 新增
 updated() {},
 beforeUnmount() {}, // 新增
 unmounted() {}
}

created - 自定义指令所在组件, 创建后

beforeMount - 就是Vue2.x中的 bind, 自定义指令绑定到 DOM 后调用. 只调用一次, 注意: 只是加入进了DOM, 但是渲染没有完成

mounted - 就是Vue2.x中的 inserted, 自定义指令所在DOM, 插入到父 DOM 后调用, 渲染已完成(最最重要)

beforeUpdate - 自定义指令所在 DOM, 更新之前调用

updated - 就是Vue2.x中的 componentUpdated

beforeUnmount - 销毁前

unmounted - 销毁后

来源:https://blog.csdn.net/weixin_46873254/article/details/120404197

标签:Vue2.x,Vue3.x,自定义指令,钩子函数
0
投稿

猜你喜欢

  • DBeaver一款替代Navicat的数据库可视化工具

    2024-01-18 07:55:44
  • Golang依赖注入工具digo的使用详解

    2023-08-27 13:00:43
  • MySQL SELECT数据查看WHERE(AND OR IN NOT)语句

    2024-01-25 16:05:22
  • SQL Server 2005/2008 导入导出数据常见报错解决方法

    2024-01-28 00:31:12
  • 详解oracle mysql 中的“不等于“ <> != ^= is not

    2024-01-25 03:35:08
  • jQuery中each方法的使用详解

    2024-04-09 19:47:22
  • 关于Flask项目无法使用公网IP访问的解决方式

    2021-01-03 10:04:00
  • Python3安装Pillow与PIL的方法

    2022-09-27 10:21:28
  • vue的hash值原理也是table切换实例代码

    2023-07-02 16:54:52
  • Python中的 if 语句及使用方法

    2022-12-19 16:35:10
  • python3利用smtplib通过qq邮箱发送邮件方法示例

    2023-12-17 06:34:24
  • 多个datatable共存造成多个表格的checkbox都被选中

    2024-05-11 09:18:42
  • PHP实现的注册,登录及查询用户资料功能API接口示例

    2024-04-30 08:50:18
  • Python性能优化技巧

    2021-06-29 12:48:32
  • ajax(iframe)无刷新提交表单、上传文件

    2024-04-17 10:39:47
  • pytorch教程网络和损失函数的可视化代码示例

    2023-11-26 16:13:51
  • python随机生成指定长度密码的方法

    2023-08-07 07:24:00
  • NodeJs Express路由使用流程解析

    2024-05-11 10:16:56
  • ExtJS判断IE浏览器类型的方法

    2024-05-13 10:35:56
  • Python字符转换

    2021-08-23 04:47:13
  • asp之家 网络编程 m.aspxhome.com