当前位置: 首页 > news >正文

vue3自定义指令

一个自定义指令由一个包含类似组件生命周期钩子的对象来定义。钩子函数会接收到指令所绑定元素作为其参数。

页面内创建自定义指令

下面是一个自定义指令的例子,当一个 input 元素被 Vue 插入到 DOM 中后,它会被自动聚焦:

<script setup>
// 在模板中启用 v-focus
const vFocus = {mounted: (el) => el.focus()  //使input自动聚焦//el.querySelector('input').focus() //使el-input自动聚焦
}
</script><template><input v-focus />
</template>
创建全局自定义指令

在main.js中进行全局挂载

const app = createApp({})// 使 v-focus 在所有组件中都可用
app.directive('focus', {mounted: (el) =>   el.querySelector('input').focus() //使el-input自动聚焦 所有页面都可使用 v-focus使用
})
指令钩子​

一个指令的定义对象可以提供几种钩子函数 (都是可选的):

const myDirective = {// 在绑定元素的 attribute 前// 或事件监听器应用前调用created(el, binding, vnode, prevVnode) {// 下面会介绍各个参数的细节},// 在元素被插入到 DOM 前调用beforeMount(el, binding, vnode, prevVnode) {},// 在绑定元素的父组件// 及他自己的所有子节点都挂载完成后调用mounted(el, binding, vnode, prevVnode) {},// 绑定元素的父组件更新前调用beforeUpdate(el, binding, vnode, prevVnode) {},// 在绑定元素的父组件// 及他自己的所有子节点都更新后调用updated(el, binding, vnode, prevVnode) {},// 绑定元素的父组件卸载前调用beforeUnmount(el, binding, vnode, prevVnode) {},// 绑定元素的父组件卸载后调用unmounted(el, binding, vnode, prevVnode) {}
}
钩子参数​

指令的钩子会传递以下几种参数:

  • el:指令绑定到的元素。这可以用于直接操作 DOM。

  • 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。

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

相关文章:

  • 236.【2023年华为OD机试真题(C卷)】生成哈夫曼树(优先搜索(DFS)-JavaPythonC++JS实现)
  • 为什么有人说PMP是水证,它的含金量到底怎么样?
  • 大数据开发之Hive(查询、分区表和分桶表、函数)
  • Linux Kernel 4.14--EOF
  • 9.云原生存储之ceph在k8s中应用及问题处理
  • Neo4j恢复
  • get_reg_by_offset函数
  • Halcon滤波器 laplace 算子
  • Flutter 小技巧之升级适配 Xcode15
  • 「JavaSE」类和对象2
  • 容器化IAC部署
  • 如何使用Imagewheel搭建一个简单的的私人图床无公网ip也能访问
  • 鸿蒙Harmony--状态管理器--@Prop详解
  • 【自控实验】2. 采样控制系统特性
  • Hologres + Flink 流式湖仓建设
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CSS实用技巧干货
  • es6(二):字符串的扩展
  • Spark学习笔记之相关记录
  • use Google search engine
  • 从零开始的无人驾驶 1
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 搞机器学习要哪些技能
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 面试总结JavaScript篇
  • 排序(1):冒泡排序
  • 前端
  • 如何编写一个可升级的智能合约
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​渐进式Web应用PWA的未来
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #QT(串口助手-界面)
  • (arch)linux 转换文件编码格式
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (数据结构)顺序表的定义
  • (算法设计与分析)第一章算法概述-习题
  • (转)setTimeout 和 setInterval 的区别
  • (转)可以带来幸福的一本书
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .gitignore
  • .net Application的目录
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net 提取注释生成API文档 帮助文档
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 的字符串暂存池
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET大文件上传知识整理
  • .net分布式压力测试工具(Beetle.DT)