百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Vue2自定义指令(directive)(vue2自定义指令兼容vue3)

ztj100 2024-10-27 18:35 35 浏览 0 评论


在Vue中,指令都是以 v-xxx 命令,因此自定义指令也是如此

自定义指令时,指令名称不需要加前缀v-,但在调用的时候一定要加前缀v-

自定义一个获取焦点的指令 v-focus

//定义一个全局的指令(directive:指令)
//参数1为指令名称,定义的时候,不需要加 v- ,调用时需要v- ,
//参数2是对象,对象中有指令相关函数,在特定时候运行,
Vue.directive('focus',{
    //获取当前指令(v-focus)绑定的元素e,e.focus()方法在绑定元素插入到DOM中时调用
    inserted:function(e){
       e.focus()
    }
})
//等同于js中: var e = document.getElementById("e")
//             e.focus()
 
//局部指令定义,vm实例中
directives:{
  focus:{
     inserted:function(e){
           e.focus()
     }
  }
}

钩子函数:

  1. bind:只调用一次,第一次绑到到元素时调用,一般用在初始化中,在inserted之前,此时父节点为null,在dom树绘制之前调用,一般用作初始化属性(样式、元素属性)的设置,绑定后属性就已经在当前元素中了。
  2. inserted:被绑定元素插入到父节点时调用,父节点存在即可,只调用一次,在dom树绘制之后调用,一般用作初始化方法(js的行为方法)的设置,绑定到DOM中后立即执行一次。
  3. updated:所在的组件更新时调用,在componentUpdated之前调用,更新前的状态,多次调用
  4. componentUpdated:所在的组件及及子元素全部更新时调用,更新后的状态,多次调用
  5. unbind:只调用一次,指令与元素解绑时调用
  Vue.directive('指令名称',{
            //指令绑定到元素上的时候会立即执行,一般用作初始化,只执行一次,当指令刚被绑定到元素的时候,还没有插入到DOM树中去
            //绑定时不管有没有插入到DOM中,已经有了value="" 和 style="color:red"的属性
            //bind因此可以做一些初始化属性的设置
            bind:function (e) {  
                e.value = "文本框初始值"
                e.style.color = 'red'
            },
            inserted:function (e) { //元素插入到DOM树中后会立即执行一次,可作初始化方法的设置
                e.focus()
            },
            updated:function (e) { //vnode更新的时候会执行,可触发多次
               
            },
            componentUpdated:function (e) {
 
            },
            unbind:function (e) {
 
            }
 
        })
 
 
 <input type="text" v-focus>

钩子函数参数:

  1. el:指令被绑定的当前元素,即当前指令所在的元素,此参数名可以变更,其他参数名不能变更
  2. binding:
  • name:指令名,不包括v-前缀
  • value:指令绑定值,v-color=" 'blue' ","1+1"为2

  • oldValue:指令绑定的前一个值
  • expression:指令绑定值的字符串形式"1+1"就是"1+1"而不是2
  • arg:传递给指令的参数v-color:blue

    modifiers:包含修饰符对象 v-mydirective.foo.bar modifiers为{foo.true,bar,true}

    3.vnode:vue编译器生成的虚拟节点

    4.oldVnode:上一个虚拟节点

    Vue.directive("color",{
                bind:function (e,binding) {
                    e.style.color = binding.value  
                    e.style.color = binding.arg
                }
            })
     
    //注意单引号,否则blue为data中数据
    <input type="text" v-focus v-color="'blue'">
    <input type="text" v-focus v-color:blue>

    自定义指令的简写

    如果只有bind或updated钩子函数,则可以简写

    Vue.directive("color", (e,binding) => {
                    e.style.color = binding.value  
                    e.style.color = binding.arg
                
                 })
     
    //注意单引号,否则blue为data中数据
    <input type="text" v-focus v-color="'blue'">
    <input type="text" v-focus v-color:blue>

    相关推荐

    离谱!写了5年Vue,还不会自动化测试?

    前言大家好,我是倔强青铜三。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。Playwright是一个功能强大的端到...

    package.json 与 package-lock.json 的关系

    模块化开发在前端越来越流行,使用node和npm可以很方便的下载管理项目所需的依赖模块。package.json用来描述项目及项目所依赖的模块信息。那package-lock.json和...

    Github 标星35k 的 SpringBoot整合acvtiviti开源分享,看完献上膝盖

    前言activiti是目前比较流行的工作流框架,但是activiti学起来还是费劲,还是有点难度的,如何整合在线编辑器,如何和业务表单绑定,如何和系统权限绑定,这些问题都是要考虑到的,不是说纯粹的把a...

    Vue3 + TypeScript 前端研发模板仓库

    我们把这个Vue3+TypeScript前端研发模板仓库的初始化脚本一次性补全到可直接运行的状态,包括:完整的目录结构所有配置文件研发规范文档示例功能模块(ExampleFeature)...

    Vue 2迁移Vue 3:从响应式到性能优化

    小伙伴们注意啦!Vue2已经在2023年底正式停止维护,再不升级就要面临安全漏洞没人管的风险啦!而且Vue3带来的性能提升可不是一点点——渲染速度快40%,内存占用少一半,更新速度直接翻倍!还在...

    VUE学习笔记:声明式渲染详解,对比WEB与VUE

    声明式渲染是指使用简洁的模板语法,声明式的方式将数据渲染进DOM系统。声明式是相对于编程式而言,声明式是面向对象的,告诉框架做什么,具体操作由框架完成。编程式是面向过程思想,需要手动编写代码完成具...

    苏州web前端培训班, 苏州哪里有web前端工程师培训

    前端+HTML5德学习内容:第一阶段:前端页面重构:PC端网站布局、HTML5+CSS3基础项目、WebAPP页面布局;第二阶段:高级程序设计:原生交互功能开发、面向对象开发与ES5/ES6、工具库...

    跟我一起开发微信小程序——扩展组件的代码提示补全

    用户自定义代码块步骤:1.HBuilderX中工具栏:工具-代码块设置-vue代码块2.通过“1”步骤打开设置文件...

    JimuReport 积木报表 v1.9.3发布,免费可视化报表

    项目介绍积木报表JimuReport,是一款免费的数据可视化报表,含报表、大屏和仪表盘,像搭建积木一样完全在线设计!功能涵盖:数据报表、打印设计、图表报表、门户设计、大屏设计等!...

    软开企服开源的无忧企业文档(V2.1.3)产品说明书

    目录1....

    一款面向 AI 的下一代富文本编辑器,已开源

    简介AiEditor是一个面向AI的下一代富文本编辑器。开箱即用、支持所有前端框架、支持Markdown书写模式什么是AiEditor?AiEditor是一个面向AI的下一代富文本编辑...

    玩转Markdown(2)——抽象语法树的提取与操纵

    上一篇玩转Markdown——数据的分离存储与组件的原生渲染发布,转眼已经鸽了大半年了。最近在操纵mdast生成md文件的时候,心血来潮,把玩转Markdown(2)给补上了。...

    DeepseekR1+ollama+dify1.0.0搭建企业/个人知识库(入门避坑版)

    找了网上的视频和相关文档看了之后,可能由于版本不对或文档格式不对,很容易走弯路,看完这一章,可以让你少踩三天的坑。步骤和注意事项我一一列出来:1,前提条件是在你的电脑上已配置好ollama,dify1...

    升级JDK17的理由,核心是降低GC时间

    升级前后对比升级方法...

    一个vsCode格式化插件_vscode格式化插件缩进量

    ESlint...

    取消回复欢迎 发表评论: