Vue2 第十节 内置指令和自定义指令

news2024/12/26 10:43:59

1.之前学过的指令

2. 内置指令

3. 自定义指令

一.之前学过的指令

指令名用法
v-bind单项绑定解析表达式,可以简写为:xxx
v-model双向绑定
v-for遍历数组/对象/字符串
v-on 绑定监听事件,可以简写为@
v-if条件渲染(动态控制节点是否存在)

v-else

条件渲染(动态控制节点是否存在)

v-show

条件渲染(动态控制节点是否展示)

二.内置指令

① 内置指令以及用法汇总

指令名用法
v-text更新元素textContent 会替换所有标签内容,只展示内容,不解析标签
v-html向指定节点中渲染包含html结构的内容
v-once所有节点在初次动态渲染后,就视为静态内容了;   以后数据的改变不会引起v-once所在结构的更新,可以优化一些性能
v-pre跳过其所在节点的编译过程;    可利用它跳过没有使用指令语法,没有使用插值语法的节点,效率会变高,加快编译
v-cloak

本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性

使用css配合v-cloak可以解决网速慢的时候,页面展示出未解析的{{XXX}}值

② 内置标签逐个分析

(1)v-text: 只展示内容,不解析标签

(2)v-html 

  • 作用:向指定节点中渲染包含html结构的内容
  • 与插值语法的区别

   ①  v-html会替换掉节点中的所有内容,{{xxx}}不会

   ② v-html可以识别html结构

  •  注意:v-html有安全性问题

     ① 在网站上动态渲染任何HTML都是非常危险的,容易导致XSS攻击

     ② 一定要在可信的内容上使用v-html ,不要在用户提交的内容上

     ③ XSS攻击就是想办法去让用户的浏览器执行一些这个网页中原本不存在的前端代码,比如使用 document.cookie命令窃取用户的coolkie信息

(3)v-once:n的值刚开始是1,之后就不会再变化了

 (4)v-pre: 适用于没有指令语法,没有使用插值语法的节点

使用v-pre的节点不会去编译

 (5)v-cloak:Vue实例创建完毕并接管容器后,会删除v-cloak属性

下面实现一个5秒后加载vue库,在这期间,有v-cloak的属性就不展示,等到Vue创建完实例并接管容器后,v-cloak会被删除

 三. 自定义指令

1. 函数式

2. 对象式

3.全局自定义指令/局部自定义指令

4.需求案例

      需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍

      需求2:定义一个v-fbind指令,和v-bind功能类似,但是可以让其绑定的input元素默认获取焦点

(1)自定义指令语法

  • 局部指令: 

1.对象式

new Vue({
            directives:{指令名:配置对象}
        })

2.函数式

new Vue({
            directives:{指令名:回调函数}
        })

3. 全局指令

     (1)Vue.directive(指令名, 配置对象)

     (2)Vue.directive(指令名, 回调函数)

4. 代码举例

(1)需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍

        <h2>当前的n值是:<span v-text="n"></span></h2>
        <!-- 定义一个v-big指令 -->
        <h2>放大10倍后n的值是:<span v-big="n"></span></h2>
        <button @click="n++">点我+1</button>

(2)  函数会有两个参数,第一个参数是定义指令的html元素,第二个参数指令的信息,可以取到指令当前的值, 指令在定义时不加v-, 但是在使用的时候需要加v-

<script type="text/javascript">
        new Vue({
            el: '#root',
            data: {
                name: 'hello',
                n: 1
            },
            directives: {
                // 函数式
                big (element, binding) {
                    //  这里的this是window
                    console.log('big', this)
                    console.log(element, binding)
                    element.innerText = binding.value * 10
                }
            }
        })
    </script>

 (3)big函数何时会被调用

  •    指令与元素成功绑定时(一上来的时候就会调用)
  •    指令所在模板被重新解析时会调用

 (4)需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点

(5) 配置对象中常用的三个回调函数

  • bind (element, binding) :指令与元素成功绑定时

  • inserted (element, binding):指令所在元素插入页面时调用

  • update (element, binding):指令所在模板结构被重新解析时调用

 (6)上面获取焦点需要写到inserted中,就是元素插入页面的时候就需要调用,否则不生效,fbind需要写成对象式,因为函数式无法完成上述获取焦点的功能:函数式在指令与元素绑定时和指令所在的模板结构被重新解析时调用,指令与元素绑定时,元素还没有插入页面,所以使用focus()无效,必须写成对象式,将focus()写到inserted函数中,所在元素插入页面之后调用就可以生效

(7)自定义指令命名的一个小问题,如果自定义的指令是多个单词,要使用 xx-yy  的命名法,不要使用小驼峰命名

<h2>放大10倍后n的值是:<span v-big-number="n">

 在定义方法时,需要用引号括起来

也可以使用简写的形式

 (8)注意:自定义函数里面的this是window

 (9)全局指令举例:

  •    函数式写法
Vue.directive('big', function (element, binding) {
       element.innerText = binding.value * 10
})
  •   对象式写法
 Vue.directive('fbind', {
            bind (element, binding) {
                console.log(this) // 此处的this是window
                element.value = binding.value
                console.log('bind')
            },
            inserted (element, binding) {
                element.focus()
                console.log('inserted')
            },
            update (element, binding) {
                element.value = binding.value
                console.log('update')
            }
        })

 

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

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

相关文章

算法通关村第二关——反转链表白银挑战笔记

文章目录 1.链表指定区间翻转2.两两交换链表中的节点 1.链表指定区间翻转 LeetCode 92.反转链表 解法一&#xff1a;头插法。利用虚拟节点进行反转&#xff0c;因为头节点有可能发生变化&#xff0c;比如 left1 那么需要 dummyNode.next 记录头结点&#xff0c;使用虚拟头节点…

计算机网络(2) --- 网络套接字

计算机网络&#xff08;1&#xff09; --- 网络介绍_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131967378?spm1001.2014.3001.5501 目录 1.端口号 2.TCP与UDP协议 1.TCP协议介绍 1.TCP协议 2.UDP协议 3.理解 2.网络字节序 发送逻辑…

学会这13个问题,轻松拿捏Java容器面试

java 容器都有哪些&#xff1f; 常用容器的图录&#xff1a; Collection 和 Collections 有什么区别&#xff1f; java.util.Collection 是一个集合接口&#xff08;集合类的一个顶级接口&#xff09;。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java …

29.利用fminbnd 求解 最大容积问题(matlab程序)

1.简述 用于求某个给定函数的最小值点。 使用方法是&#xff1a; xfminbnd(func,x1,x2) func是函数句柄&#xff0c;然后x1和x2就是函数的区间&#xff0c;得到的结果就是使func取最小值的x值 当然也可以使用[x,fv]fminbnd(func,x1,x2)的方式&#xff0c;这个时候fv就是函数…

项目实战 — 消息队列(2){数据库操作}

目录 一、SQLite &#x1f345; 1、添加依赖 &#x1f345; 2、修改配置文件后缀&#xff08;properties -> yaml&#xff09; &#x1f345; 3、编写配置文件 二、建立数据表 三、添加插入和删除方法 四、整合数据库操作&#xff08;DataBaseManger类&#xff09; &a…

螺旋矩阵(JS)

螺旋矩阵 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff…

【自动化运维】编写LNMP分布式剧本

目录 一 playbook编写LNMP1.1环境设置1.2编写Nginx剧本1.3、编写Mysql剧本1.4准备PHP剧本 一 playbook编写LNMP 1.1环境设置 ip服务192.168.243.100ansible192.168.243.102nginx192.168.243.103PHP192.168.243.104mysql 1.2编写Nginx剧本 1.编写Nginx源 mkdir -p /etc/ans…

Linux之 centos、Ubuntu 安装常见程序

CentOS 安装 MySql 注意 需要有root权限 安装5.7版本 – 由于MySql并不在CentOS的官方仓库中&#xff0c;所以需要通过rmp命令&#xff1a; 导入MySQL仓库密钥 1、配置MySQL的yum仓库 配置yum仓库 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 安装…

【AHB-Lite总线】hreadyin和hreadyout的区别

AHB-Lite总线协议请查看 AHB-Lite总线协议 首先看下hreadyin和hreadyout在系统中的位置 从图中可以看到&#xff0c;每个AHB从设备都有一个HREADY输出信号&#xff08;hreadyout&#xff09;&#xff0c;它连接到多路复用器。该多路复用器的输出是AHB主机看到的全局hready信…

看完ChatGPT的两个比喻,更加确信为什么人人都应该去使用它

​ ChatGPT就像火 丹尼刘是悉尼大学教育创新临时学术总监。去年年底&#xff0c;在一次工作组会议上&#xff0c;他第一次向同事展示了ChatGPT。同事说出了让刘大吃一惊的话。 “他说&#xff0c;‘哇&#xff0c;这就像火一样&#xff0c;’”刘回忆道。 刘一开始觉得这个…

《JavaSE-第二十二章》之线程安全问题

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

安卓相关内容

adb环境变量设置完之后&#xff0c;要重启一次“终端”窗口。 adb安装apk到手机 Android开发&#xff1a;用adb命令安装apk到手机-腾讯云开发者社区-腾讯云 This adb servers $ADB_VENDOR_KEYS is not set frida 出现问题&#xff1a;unable to start: address already in …

软件测试面试题——接口自动化测试怎么做?

面试过程中&#xff0c;也问了该问题&#xff0c;以下是自己的回答&#xff1a; 接口自动化测试&#xff0c;之前做过&#xff0c;第一个版本是用jmeter 做的&#xff0c;1 主要是将P0级别的功能接口梳理出来&#xff0c;根据业务流抓包获取相关接口&#xff0c;并在jmeter中跑…

ES开启身份认证

文章目录 X-Pack简介之前的安全方案ES开启认证ES服务升级https协议开启集群节点之间的证书认证 X-Pack简介 X-Pack是Elastic Stack扩展功能&#xff0c;提供安全性&#xff0c;警报&#xff0c;监视&#xff0c;报告&#xff0c;机器学习和许多其他功能。 X-Pack的发展演变&am…

聊聊拉长LLaMA的一些经验

Sequence Length是指LLM能够处理的文本的最大长度&#xff0c;越长&#xff0c;自然越有优势&#xff1a; 更强的记忆性。更多轮的历史对话被拼接到对话中&#xff0c;减少出现遗忘现象 长文本场景下体验更佳。比如文档问答、小说续写等 当今开源LLM中的当红炸子鸡——LLaMA…

开放麒麟1.0发布一个月后,到底怎么样?另一款操作系统引发热议

具有里程碑意义 7月5日&#xff0c;国产首个开源桌面操作系统“开放麒麟1.0”正式发布。 标志着我国拥有了操作系统组件自主选型、操作系统独立构建的能力&#xff0c;填补了我国在这一领域的空白。 举国欢庆&#xff0c;算的上是里程碑意义了&#xff01; 发布后用着如何&a…

Linux系统下U盘打不开: No application is registered as handling this file

简述 系统是之前就安装好使用的Ubuntu14.04&#xff0c;不过由于某些原因只安装到了机械硬盘中&#xff1b;最近新买了一块固态硬盘&#xff0c;所以打算把Ubuntu系统迁移到新的固态硬盘上&#xff1b; 当成功的迁移了系统之后发现其引导有点问题&#xff0c;导致多个系统启动不…

所有流的知识都有,IO流原理及流的分类

1、Java IO流原理 I/O是Input/Output的缩写&#xff0c; I/O技术是非常实用的技术&#xff0c;用于处理设备之间的数据传输。如读/写文件&#xff0c;网络通讯等。 Java程序中&#xff0c;对于数据的输入/输出操作以”流(stream)” 的方式进行。java.io包下提供了各种“流”类…

C++语法(27)--- 类型转换和C++线程库

C语法&#xff08;26&#xff09;--- 特殊类设计_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131879800?spm1001.2014.3001.5501 目录 1.类型转换 1.C语言的转换模式 2.C四种类型转换 1.static_cast 2.reinterpret_cast 3.const_cast …

ALLEGRO之Logic

本文主要讲述ALLEGRO的Logic菜单。 &#xff08;1&#xff09;Net Logic&#xff1a;暂不清楚&#xff1b; &#xff08;2&#xff09;Net Schedule&#xff1a;暂不清楚&#xff1b; &#xff08;3&#xff09;AssignDifferential Pair&#xff1a;暂不清楚&#xff1b; &a…