当前位置: 首页 > 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 钩子中可用。

http://www.lryc.cn/news/280925.html

相关文章:

  • ECharts 多季度连续显示到一个图中。
  • 【Microsoft Copilot】手机端发布 ——GPT-4, DALL-E3 免费用
  • [蓝桥杯 2013 省 AB] 错误票据
  • IDEA GitHub令牌原理(Personal Access Token)
  • [开发语言][python][c++]:C++中的this指针和Python中的Self -- 26岁生日
  • Android Traceview 定位卡顿问题
  • 第三方 Cookie 被禁用?企业该如何实现用户精准运营和管理?
  • Autosar PNC网络管理配置(2)-基于ETAS软件
  • 【SpringMVC快速使用】1.@RestController @RequestMapping 2.logback的使用
  • C2593 operator << 不明确
  • vue:使用【3.0】:条件模块
  • Kafka与RabbitMQ的区别
  • C++力扣题目538--把二叉搜索树转换为累加树
  • 曲线生成 | 图解贝塞尔曲线生成原理(附ROS C++/Python/Matlab仿真)
  • 【一万字干货】一篇给你讲清楚智慧城市——附送智慧系列开发项目合集
  • 关于如何禁用、暂停或退出OneDrive等操作,看这篇文件就够了
  • Vue3-46-Pinia-获取全局状态变量的方式
  • 数据库——DAY1(Linux上安装MySQL8.0.35(网络仓库安装))
  • 原生微信小程序-两次设置支付密码校验,密码设置二次确认
  • 【Python学习】Python学习15-模块
  • ARCGIS PRO SDK 设置UI控件状态:启用/禁用
  • 案例126:基于微信小程序的民大食堂用餐综合服务平台
  • cephfs 配置 mds stancd replay 操作
  • 【2023我的编程之旅】系统学习C语言easyx图形库心得体会
  • 【linux】软链接创建(linux的快捷方式创建)
  • 基于BP神经网络的光伏发电预测
  • RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用RPA全球生态 2024-01-05 17:27 发表于河北
  • 应用在LCD显示器电源插头里的氮化镓(GaN)MTC-65W1C
  • Vue新手村(二)
  • Mysql-redoLog