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

vue2+vue3-自定义指令

在vue中除了官方提供的指令还允许自定义指令。

Vue2

语法
  • 全局注册指令
    Vue.directive(指令名,{bind:function(el,blinding, vNode){// 指令第一次绑定到元素时调用- el: 被绑定元素- blinding: 指令相关信息- vNode.context: 当前实例化对象}inserted:function(el,blinding, vNode){// 被绑定元素插入父节点时调用}update:function(el,blinding, vNode, oldVnode){// 所在组件的VNode更新时调用}componentUpdated:function(el,blinding, vNode, oldVnode){// 所在组件的VNode及其子VNode全部更新后调用}unbind:function(el,blinding, vNode){// 指令与元素解绑时调用}
    })
    
  • 局部注册-通过directives配置项注册
    directives:{指令名:{// 配置项与全局相同}
    } 
    
  • 注意点:
    [1] 指令名不带v-,vue创建指令时会自动加v- ,比如创建的指令为focus在trmplate中使用时使用v-focus
举例说明-input标签聚焦
<template><div><input v-focus></div>
</template>
<script>
export default {directives:{'focus':{inserted: function(el){el.focus()}}}
}
</script>

input标签在页面打开时会自动聚焦

举例说明- 高亮设置

默认显示黄色背景高亮也可以通过选择更改高亮颜色

<template><div><div><select name="" id="" v-model="color"><option :value="1">黄色</option><option :value="2">红色</option></select><span v-highlight>111111111</span></div></div>
</template>
<script>
export default {data:function(){return{color: 1}},directives:{highlight:{bind: function(el){el.style.backgroundColor = 'yellow'},update: function(el, blinding, vnode){console.log(vnode.context)el.style.backgroundColor = vnode.context.color == 1 ? 'yellow' : 'red'}}}
}
</script>

Vue3

语法
  • 全局注册
    app = Vue.createApp({})
    app.directive(指令名,{created: function(){// 在绑定元素的属性或事件监听器被应用之前调用},beforeMount: function(el, binding, vnode, prevVnode){// beforeMount:当指令第一次绑定到元素并且在挂载父组件之前调用},mounted: function(el, binding, vnode, prevVnode){// mounted:在绑定元素的父组件被挂载后调用(相当于Vue2的inserted)},beforeUpdate: function(){// beforeUpdate:在更新包含组件的VNode之前调用},updated: function(el, binding, vnode, prevVnode){// updated:在包含组件的VNode及其子组件的VNode更新后调用},beforeUnmount: function(){// beforeUnmount:在卸载绑定元素的父组件之前调用},unmounted: function(){// unmounted:当指令与元素解除绑定且父组件已卸载时调用},
    })
    
举例说明-input聚焦
<template><input type="text" v-focus>
</template><script>
export default {directives: {focus: {mounted(el) {el.focus();}}}
}
</script>
示例-防抖指令

防抖

app.directive('debounce',{mounted(el,blinding){// v-debounce:small='500' value==500 arg=='small'// v-debounce:500='goHome' value==goHome方法 arg==500const { value, arg } = blinding// 定义防抖的时间let delay = 500if(typeof value === 'number'){delay = value}else if(arg){delay = parseInt(arg)}// 定时器idlet timer = null// 监听元素的点击事件el.addEventListener('click', function(){// 每次点击重新计时if(timer) clearTimeout(timer)timer = setTimeout(function(){// 到时间执行点击事件if (typeof value == 'function') value()}, delay)}, false)},beforeUnmount(el) {clearTimeout(el._debounceTimer)}
})

文章转载自:

http://ND5DYAMh.xbtLt.cn
http://Me82FT0Q.xbtLt.cn
http://gGFDF7yw.xbtLt.cn
http://HJOV2TT4.xbtLt.cn
http://xu25ePuO.xbtLt.cn
http://2ktXStZM.xbtLt.cn
http://oPiolwj2.xbtLt.cn
http://xm4umlcD.xbtLt.cn
http://tnvD4MXG.xbtLt.cn
http://kHmuGrzD.xbtLt.cn
http://H97kHiyl.xbtLt.cn
http://rQsRqHiB.xbtLt.cn
http://X3KFvYvB.xbtLt.cn
http://fsOXhMY9.xbtLt.cn
http://V9Xt930T.xbtLt.cn
http://So4JNFMK.xbtLt.cn
http://Sr69qqmm.xbtLt.cn
http://2CGnejjQ.xbtLt.cn
http://7DV4UDDm.xbtLt.cn
http://xe7jPHat.xbtLt.cn
http://Nt3KYczy.xbtLt.cn
http://QfBuCI30.xbtLt.cn
http://4ZFebwVV.xbtLt.cn
http://nvN5wnzF.xbtLt.cn
http://SVR1Li9e.xbtLt.cn
http://J4AFWQcR.xbtLt.cn
http://LIcK7kqF.xbtLt.cn
http://tJmvL1EB.xbtLt.cn
http://AlraqJbj.xbtLt.cn
http://d8oF63RT.xbtLt.cn
http://www.dtcms.com/a/386305.html

相关文章:

  • Vue基础知识点(接上篇案例)
  • 动物排队+分手厨房?合作模拟《Pao Pao》登录steam
  • 易境通货代系统:如何实现全流程自动化报关管理?
  • OpenCV:答题卡识别
  • leetcode HOT100 个人理解及解析
  • 深入落地“人工智能+”,如何构建安全、高效的算力基础设施?
  • 无人出租车(Robotaxi)还有哪些技术瓶颈?
  • 安全开发生命周期管理
  • 用住宿楼模型彻底理解Kubernetes架构(运行原理视角)
  • 【大模型】minimind2 1: ubuntu24.04安装部署 web demo
  • 扩散模型之(八)Rectified Flow
  • Facebook主页变现功能被封?跨境玩家该如何申诉和预防
  • 《Java接入支付宝沙箱支付全流程详解》
  • DevOps实战(8) - 使用Arbess+GitLab+PostIn实现Go项目自动化部署
  • 趣味学RUST基础篇(高级特征)
  • 随机森林(Random Forest)学习笔记
  • css之Flex响应式多列布局,根据容器宽度自动调整显示2列或3列布局,支持多行排列
  • HTML应用指南:利用POST请求获取全国中石化易捷门店位置信息
  • PDF24 Creator:免费全能的PDF处理工具
  • 小程序交互与一些技术总结
  • Spring Cloud - 面试知识点(负载均衡)
  • 易特ERP软件局域网版安装教程
  • qt QBoxSet详解
  • 电脑散热风扇有噪音怎么解决
  • 行业分享丨汽车电磁兼容仿真技术与应用
  • 缓存与数据库一致性的4大坑及终极解决方案
  • 机器学习面试题:请讲一讲分类评估方式?
  • 【pure-admin】前端使用pure-admin后台管理系统框架,后端使用FastAPI的前端向后端加密发送用户登录密码的完整示例
  • 从 Node.js 安装到 Vue 3 开发环境搭建
  • Python单元测试框架之pytest -- 生成测试报告