(十七)Vue之自定义指令

news2024/11/15 23:26:23

文章目录

  • 自定义指令
    • 局部指令
      • 回调函数形式
      • 配置对象形式
    • 全局配置
      • 回调函数形式
      • 配置对象形式

Vue学习目录

上一篇:(十六)Vue之内置指令

先看两个需求:

  • 需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
  • 需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

自定义指令

定义语法:

  • (1).局部指令:在new Vue实例中配置
    directives:{指令名:配置对象} 或 directives{指令名:回调函数}
  • (2).全局指令:在new Vue实例外配置
    Vue.directive(指令名,配置对象) 或 Vue.directive(指令名,回调函数)

回调函数
函数何时会被调用?

  • 1.指令与元素成功绑定时(一上来)。
  • 2.指令所在的模板被重新解析时。

回调函数的参数有:

  • el: 指令所绑定的元素,可以用来直接操作 DOM 。
  • binding: 一个对象,包含以下属性:
    • name: 指令名,不包括 v- 前缀。
    • value: 指令的绑定值, 例如: v-my-directive="1 + 1", value 的值是 2。
    • oldValue: 指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。这两个钩子是生命周期钩子,以后再说
    • expression: 绑定值的表达式或变量名。 例如 v-my-directive="1 + 1"
      expression 的值是 “1 + 1”。
    • arg: 传给指令的参数。例如 v-my-directive:foo, arg 的值是 “foo”。
    • modifiers: 一个包含修饰符的对象。 例如: v-my-directive.foo.bar, 修饰符对象 modifiers的值是 { foo: true, bar: true }
  • vnode: Vue 编译生成的虚拟节点。
  • oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

配置对象中的回调:

  • (1)bind:指令与元素成功绑定时调用。(常用)
  • (2)inserted:指令所在元素被插入页面时调用。(常用)
  • (3)update:指令所在模板结构被重新解析时调用。(常用)
  • (4)componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
  • (5)unbind: 只调用一次, 指令与元素解绑时调用。

(钩子:这个以后再说,现在先理解为函数)常用的是前三个

注意点:

  • 1.指令定义时不加v-,但使用时要加v-;
  • 2.指令名如果是多个单词,要使用kebab-case命名方式。
  • 3.this是window

局部指令

局部指令在new Vue实例中使用directives配置项配置

回调函数形式

<div id="root">
    <h2>{{name}}</h2>
    <h2>当前的n值是:<span v-text="n"></span> </h2>
    <h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
    <button @click="n++">点我n+1</button>
    <hr/>
    <input type="text" v-fbind:value="n">

    <hr/><hr/>
</div>
		data:{
            name:'自定义指令',
            n:1

        },
        directives:{
            big(element,binding) {
                element.innerText = binding.value * 10
            },
            fbind(element,binding){
                element.value = binding.value
                element.focus()
            },
        }

效果:实现了需求1,但是需求2的默认获取焦点没有实现,这是因为回调函数其中一个调用时机是一上来就会被调用,也就是元素还没插入页面就会被调用,元素还没有插入页面就获取焦点,显然是不可行的,这是一个顺序问题,所以回调函数实现不了需求2,需要用配置对象实现。
在这里插入图片描述

配置对象形式

	directives:{
            big(element,binding) {
                element.innerText = binding.value * 10
            },
            /*fbind(element,binding){
                element.value = binding.value
                element.focus()
            },*/
            fbind:{
                //指令与元素成功绑定时(一上来)
                bind(element,binding){
                    element.value = binding.value
                },
                //指令所在元素被插入页面时
                inserted(element,binding){
                    element.focus()
                },
                //指令所在的模板被重新解析时
                update(element,binding){
                    element.value = binding.value
                }
            }
        }

效果:所有需求都能实现
在这里插入图片描述

全局配置

如果多个容器使用同一个自定义指令,可以配置成全局配置。
在new Vue实例外使用Vue.directive配置

回调函数形式

<div id="root2">
    <h2>当前的n值是:<span v-text="n"></span> </h2>
    <input type="text" v-fbind:value="n">
</div>
	Vue.directive('fbind',(element,binding)=>{
        element.value = binding.value
        element.focus()
    })
    new Vue({
        el: '#root2',
        data: {
            n: 10
        },
    })

效果:同样实现不了需求2
在这里插入图片描述

配置对象形式

	Vue.directive('fbind',{
        //指令与元素成功绑定时(一上来)
        bind(element,binding){
            element.value = binding.value
        },
        //指令所在元素被插入页面时
        inserted(element,binding){
            element.focus()
        },
        //指令所在的模板被重新解析时
        update(element,binding){
            element.value = binding.value
        }
    })

效果:发现只有下面的文本框获取焦点,这是因为只能获取一个焦点,不能获取多个焦点,并且模板解析是从上往下解析,解析到第一个文本框就获取焦点,然后就是下一个文本框获取焦点,直到没有文本框为止。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

陈表达学VBA-msgbox辨别用户选择和代码调用

今天有个老客户提出需求&#xff1a; 模块&#xff1a;sub 过程A( ) ①如果是单独使用时则显示msgbox选择消息框 ②如果A过程调用B过程&#xff0c;则不显示消息框&#xff0c;默认选择是 msgbox没有设置默认值这个功能&#xff0c;msgbox也没有参数可以失败是用户点击还是代…

pytorch基础操作(六)利用L2范数(权重衰减)解决线性模型过拟合问题

一、一些概念 训练误差&#xff08;training error&#xff09; 是指&#xff0c;模型在训练数据集上计算得到的误差。 泛化误差&#xff08;generalization error&#xff09; 是指&#xff0c;模型应⽤在同样从原始样本的分布中抽取的⽆限多数据样本时&#xff0c;模型误差的…

【Linux】Linux基本指令

Linux基本指令1.ls指令2.pwd指令3.cd指令3.touch 指令4.mkdir指令5. rmdir指令 && rm 指令5.1 rmdir5.2 rm6.tree 指令7.man指令8.cp指令9.mv指令10. cat指令11.echo指令12.more指令13.less指令14.wc指令15.head指令16.tail指令17. | &#xff08;管道指令&#xff09;…

每天五分钟机器学习:PCA算法如何确定数据压缩降维的最佳维度?

本文重点 上节课程中我们已经学习了pca算法,已经知道了如何将n维特征变量降到k维,k是PCA算法的一个参数,也被称为主成分的数量。那么现在就产生了一个问题,这个问题就是如何选择K,因为PCA要做的就是要尽量减少投射的平均均方误差,所以K的选择很关键。 平均均方误差 其中…

22.MongoDB删除操作效率及相关问题验证

最近遇到一个了一个MongoDB数据删除的问题&#xff0c;需要一次性删除上线即1.5年前~1年前的数据且之后每天清空一年过期的数据。在数据量比较大的情况下何种方式的删除效率最高是一个值得研究的问题&#xff0c;本文通过实际测试找出其中规律。 本文采用腾讯云mongodb集群进行…

基于java的连连看游戏设计-计算机毕业设计

项目介绍 基于java设计的连连看游戏规则是模仿网络上的最普通的连连看游戏&#xff0c;主要是鼠标点击两次的图片能否消去的问题。当前&#xff0c;前提是点击两张相同的图片&#xff0c;若是点击的是同一张图片或者两张不同的图片&#xff0c;则不予处理。在两张相同的图片所…

这份pdf成功让我拿下了蚂蚁金服、字节跳动、小米等大厂的offer

关于程序员&#xff0c;除了做项目来提高自身的技术之外&#xff0c;还有一种提升自己的专业技能就是&#xff1a;多&#xff01;看&#xff01;书&#xff01; 小编整理出一篇Java进阶架构师之路的核心知识&#xff0c;同时也是面试时面试官必问的知识点&#xff0c;篇章也是…

点云可视化工具

点云可视化工具 平时查看点云文件主要是用CloudCompare&#xff0c;基本上也就是打开看看这个点云大概是个什么样子&#xff0c;很少会在CloudCompare对点云进行处理&#xff0c;它可以直接将点云拖进软件进行显示也还是挺方便的。但是还是有点点不是很方便的地方&#xff0c;…

Linux从入门到进阶学习(Ⅲ):Linux权限管控

目录 1 root用户 1.1 su 1.2 sudo 2 用户和用户组 3 查看权限控制信息 4 修改权限控制 4.1 chmod命令 4.2 chown命令 1 root用户 1.1 su root用户即超级管理员 su [-] [用户名] 切换到root用户&#xff0c;exit退回普通用户从 -&#xff1a;可选&#xff0…

社会网络分析工具—— Gephi 或 NetworkX的简单介绍和比较(源自GPTchat)

文章目录我的原始需求两个工具介绍二者比较下载和使用后续 使用教程我的原始需求 如何对不同认知课堂的教师提问行为序列进 行社会网络分析&#xff0c;计算不同认知层级提问行为的中间 中心度和接近中心度&#xff0c; 在进行社会网络分析时&#xff0c;您首先需要收集数据并…

ArcGIS基础:栅格转ASCII校正简单栅格坐标

【校正栅格坐标】 有一些数据量比较小的栅格数据&#xff0c;位置发生了偏移&#xff0c;可以使用【转换工具】对其位置进行校正。 先看一下原始数据&#xff1a; 有2个栅格数据&#xff0c;如下所示&#xff0c;两个数据本身是一个数据&#xff0c;只不过发生了偏移&#x…

java+ssh+mysql银行收银管理系统

项目介绍&#xff1a; 本系统为基于jspmysql的银行管理系统&#xff0c;包含业务员、管理员登录权限&#xff0c;功能如下&#xff1a; 业务员&#xff1a;可以银行系统&#xff0c;可以查看所有客户账户信息、可以新开账户、销户、修改账户信息、存款、取款、转账等功能。 …

C51——通过震动传感器模块让继电器的灯亮起来

继电器触发 模块可以通过跳线设置高电平触发或者低电平触发&#xff08;默认&#xff09; 首先明确继电器的工作逻辑 怎么控制“闭合”开关呢 怎么控制“断开”开关呢 NO口 是常开端 NC 常闭端 COM 公共端 通过IO口向继电器发出低电平 &#xff0c;使得COM口和NO口连接&…

05. XSS漏洞利用

05. XSS漏洞利用 XSS漏洞利用&#xff08;上&#xff09; 获取cookie 什么是cookie&#xff1f; **定义&#xff1a;**cookie是指某些网站为了辨别用户身份而储存在用户本地终端&#xff08;Client Side&#xff09;上的数据&#xff08;通常经过加密&#xff09; **作用&…

jsp+ssm计算机毕业设计宠物医院信息管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

垃圾回收相关概念

文章目录1. System.gc()的理解2.内存溢出与内存泄漏3. Stop The World4. 并发与并行5. 安全点与安全区域的说明6. 强引用、软引用、弱引用、虚引用1. System.gc()的理解 2.内存溢出与内存泄漏 3. Stop The World 4. 并发与并行 5. 安全点与安全区域的说明 6. 强引用、软引用、弱…

jsp+ssm计算机毕业设计大学生家教服务推荐系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

nuxt.js如何将访问的外部ip修改为本地ip? Do you want Code to open the external website?

问题描述&#xff1a; 提示&#xff1a;Do you want Code to open the external website? 译文&#xff1a;是否希望代码打开外部网站&#xff1f; 说明我们nuxt.js访问的是别人的ip地址&#xff0c;而并不是自己的ip 问题解决&#xff1a; 方法一&#xff1a; 查看packa…

Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图

本文介绍基于Python中gdal模块&#xff0c;对大量多时相栅格图像&#xff0c;批量绘制像元时间序列折线图的方法。 首先&#xff0c;明确一下本文需要实现的需求&#xff1a;现有三个文件夹&#xff0c;其中第一个文件夹存放了某一研究区域原始的多时相栅格遥感影像数据&#x…

C/C++socket网络编程

目录tcp和udp通信流程图socket函数bind函数listen函数accept函数connect函数recv、recvfrom、read函数send、write、sendto、sendmsg函数close、shutdown函数htonl、ntohl、htons、ntohs本地主机和网络字节序转换inet_addr、inet_aton、inet_ntop&#xff0c;IP地址转换函数set…