Vue指令的使用以及自定义指令

news2024/11/24 13:05:15

文章目录

  • 1. 指令概述
  • 2.常用指令的分类
    • 2.1 内容渲染指令
      • 2.1.1 v-text
      • 2.1.2 插值语法{{ }}
        • 2.1.2.1 插值语法{{}}可以写什么
        • 2.1.2.2 插值语法可以解决什么
      • 2.1.3 v-html
    • 2.2 属性绑定指令(v-bind)
    • 2.3 事件绑定指令(v-on)
    • 2.4 双向绑定指令(v-model)
      • 2.4.1 v-bind和v-model的区别和联系
    • 2.5 条件渲染指令
      • 2.5.1 v-if
      • 2.5.2 v-else
      • 2.5.3 v-else-if
      • 2.5.4 v-show
    • 2.6 列表渲染指令(v-for)
      • 2.6.1 v-for指令的 :key属性
  • 3.其他指令
    • 3.1 v-cloak
    • 3.2 v-once
    • 3.3 v-pre
  • 4.自定义指令
  • 4.template

1. 指令概述

(1)Vue框架中的所有指令的名字都以”v-“开始。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应的作用于DOM
(2)Vue框架中的指令都是以HTML标签的属性形式存在的,指令对于浏览器是无法看懂的,需要先让Vue框架进行编译,编译之后浏览器才可以看懂。

<span 指令写在这里></span>

(3)指令的语法规则

<HTML标签 v-指令名:参数="表达式"></HTML标签>

①表达式:在插值语法在{{}}可以写的,在指令表达式都可以写(指令中不用加{{}})
②不是所有的指令都有参数和表达式,有的指令不需要参数也不需要表达式:如v-once。
v-once:只渲染元素一次,随后的重新渲染,元素及其所有的子元素将被视为静态内容并跳过,可以用于优化性能。
(4)什么时候使用插值语法,什么时候使用指令?
①凡是标签体当中的内容想要动态,需要使用插值语法
②想让HTML标签的属性动态,需要使用指令语法

2.常用指令的分类

指令(Directives)是 vue 为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构。vue 中的指令按照不同的用途可以分为如下 6 大类:

2.1 内容渲染指令

内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下 3 个:

2.1.1 v-text

在这里插入图片描述

 <!-- 1.导入vue的库文件,在window全局就有了Vue这个构造函数 -->
    <script src="./lib/vue-2.6.12.js"></script>
    <!-- 2.创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el属性是固定的写法,表示当前vm实例要控制页面上的哪个区域,接收的值是一个选择器
            el: '#app',
            // data对象就是要渲染到页面上的数据
            data: {
                username: 'zhangsan'
                gender: 'nan'
            }
        })
    </script>

2.1.2 插值语法{{ }}

2.1.2.1 插值语法{{}}可以写什么

(1)在data中声明的
(2)常量
(3)合法的JavaScript表达式
(4)模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math 和 Date

<body>
    <div id="app">
        <!-- data中声明的 -->
        <div>{{msg}}</div>
        <div>{{age}}</div>
        <!-- 常量 -->
        <div>{{1313}}</div>
        <!-- 合法的JavaScript表达式 -->
        <div>{{1+1}}</div>
        <!-- 模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math 和 Date -->
        <h1>{{Date.now()}}</h1>
    </div>
    <script>
        // 创建vue实例
        const myVue = new Vue({
           
            data: {
                age: 28,
                msg: 'agvc'
            },
            el: '#app'
        })
        // myVue.$mount('#app')
    </script>
</body>
2.1.2.2 插值语法可以解决什么

vue 提供的 {{ }} 语法,专门用来解决 v-text 会覆盖默认文本内容的问题。这种 {{ }} 语法的专业名称是插值表达

在这里插入图片描述

2.1.3 v-html

v-text 指令和插值表达式只能渲染纯文本内容。如果要把包含 HTML 标签的字符串渲染为页面的 HTML 元素,
则需要用到 v-html 这个指令:

 <p v-html="info"></p>
const vm = new Vue({
    // el属性是固定的写法,表示当前vm实例要控制页面上的哪个区域,接收的值是一个选择器
    el: '#app',
    // data对象就是要渲染到页面上的数据
    data: {
        info: '<h1 style="color: red">欢迎学习vue</h1>'
    }
})

在这里插入图片描述

2.2 属性绑定指令(v-bind)

(1)v-bind指令是干嘛的?
它可以让HTML标签的某个属性的值产生动态的效果
(2)v-bind指令的语法格式:

<HTML标签 v-bind:参数="表达式"></HTML标签>

(3)v-bind指令的编译原理
①编译前:<HTML标签 v-bind:参数="表达式"></HTML标签>
②编译后:<HTML标签 参数="表达式"></HTML标签>
③注意两项:
a.在编译的时候v-bind后面的”参数名“会被编译为HTML标签的”属性名“
b.表达式会关联data,当data发生改变之后,表达式的执行结果就会发生变化。连带的就会产生动态效果
(3)由于 v-bind 指令在开发中使用频率非常高,因此,vue 官方为其提供了简写形式(简写为英文的 : )

2.3 事件绑定指令(v-on)

(1)vue 提供了 v-on 事件绑定指令,用来辅助程序员为 DOM 元素绑定事件监听。语法格式如下:

<div id="app">
 <p>count的值是:{{ count }}</p>
 <button v-on:click="add">+1按钮</button>
<div>
        const vm = new Vue({
          el: '#app',
          data: {
                count: 0
            },
          methods: {
            add() {
              this.count += 1      

注意:原生 DOM 对象有 onclick、oninput、onkeyup 等原生事件,替换为 vue 的事件绑定形式后,
分别为:v-on:click、v-on:input、v-on:keyup
(2)由于 v-on 指令在开发中使用频率非常高,因此,vue 官方为其提供了简写形式(简写为英文的 @ )
在这里插入图片描述
(3)事件参数对象
在原生的 DOM 事件绑定中,可以在事件处理函数的形参处,接收事件参数对象 event。同理,在 v-on 指令
(简写为 @ )所绑定的事件处理函数中,同样可以接收到事件参数对象 event,示例代码如下:

在这里插入图片描述
(5)绑定事件并传参
在使用 v-on 指令绑定事件时,可以使用 ( ) 进行传参,示例代码如下:
在这里插入图片描述
(6)$event
$event 是 vue 提供的特殊变量,用来表示原生的事件参数对象 event。$event 可以解决事件参数对象 event
被覆盖的问题。示例用法如下:
在这里插入图片描述
(7)事件修饰符
vue 提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制。常用的 5 个事件修饰符如下:
在这里插入图片描述
在这里插入图片描述
注意:上面的onLinkClick为自己定义的方法

2.4 双向绑定指令(v-model)

(1)vue 提供了 v-model 双向数据绑定指令,用来辅助开发者在不操作 DOM 的前提下,快速获取表单的数据。在这里插入图片描述
(2)注意:表单和Vue中data的数据,任一发生改变都会同步发生变化

2.4.1 v-bind和v-model的区别和联系

(1)v-bind和v-model这两个指令都可以完成数据绑定
(2)v-bind是单向数据绑定:data ==>视图;v-model是双向数据绑定:data <==> 视图
(3)v-bind可以使用在任何HTML标签当中;v-model只能使用在表单元素上,例如:input标签、select标签。v-model有这个限制是因为只有表单类的元素才能给用户提供交互输入的界面
(4)v-bind和v-model都有简写方式:
v-bind:参数="表达式" 简写为 :参数="表达式"
v-model:value="表达式" 简写为 v-model="表达式"

2.5 条件渲染指令

2.5.1 v-if

(1)v-if指令的值:true/false
①true:表示该元素会被渲染到页面上
②false:表示该元素不会被渲染到页面上

<body>
    <div id="app">
       
        <div v-if="false">{{msg}}</div>
    </div>
    
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                msg: 'Class绑定之字符串形式',
            }
        })
    </script>
</body>

2.5.2 v-else

为了提高效率,可以配合 v-if使用v-else

2.5.3 v-else-if

(1)充当 v-if 的“else-if 块”,可以连续使用
(2)v-if和v-show如何选择
①如果一个元素在页面被频繁的隐藏和显示,建议使用v-show,因为v-if的开销比较大
②v-if的优点:页面加载速度快,提高了页面的渲染效率

2.5.4 v-show

跟v-if用法一样

2.6 列表渲染指令(v-for)

(1)v-for要写在循环项上
(2)v-for的语法规则:
v-for=“变量名 in/of 数组”(变量名代表了数组中的每一个元素)
(3)v-for 还支持一个可选的第二个参数,即当前项的索引。
(item, index) in items
(4)一般会遍历对象

<body>
    <ul id="app">
        <li v-for="item in vips">
            会员名:{{item.name}},年龄:{{item.age}}
        </li>
    </ul>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                vips: [
                    { name: 'jack', age: 20 },
                    { name: 'lucy', age: 22 },
                    { name: 'tom', age: 18 }
                ]
            }
        })
    </script>
</body>

2.6.1 v-for指令的 :key属性

(1)在v-for指令所在的标签中,还有一个非常重要的属性 :key
(2)如果没有指定 :key属性,会自动拿index作为key,这个key是这个dom元素的唯一标识
(3)如果采用index作为key会存在什么问题
①效率低
②产生错乱,尤其是对数组当中非末尾元素进行操作(例如列表中已经选中了一些,又新增了列表元素)

3.其他指令

3.1 v-cloak

v-cloak 配置 css 样式来解决胡子的闪现问题。
v-cloak 指令使用在标签当中,当Vue实例接管之后会删除这个指令。
这是一段CSS样式:当前页面中所有带有v-cloak属性的标签都隐藏起来。

<style>
	[v-cloak] {
		display : none;
	}
 </style>

3.2 v-once

初次接触指令的时候已经学过了。只渲染一次。之后将被视为静态内容。

3.3 v-pre

使用该指令可以提高编译速度。带有该指令的标签将不会被编译。可以在没有Vue语法规则的标签中使用
可以提高效率。不要将它用在带有指令语法以及插值语法的标签中。

4.自定义指令

(1)函数式方式

<body>
    <div id="app">
        <h1 v-text-danger="msg">test</h1>
       
    </div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                msg:'自定义指令',              
            },
            directives:{
            //  指令1
            //  指令2
            //  ...
            // 关于指令的名字:
            //  (1)v- 不需要写 
            //  (2)Vue官方建议指令的名字要全部小写,如果是多个单词的话,使用 - 进行衔接
             // 这个回调函数的执行时机包括两个:1.标签和指令第一次绑定的时候 2.模板被重新解析的时候
            // 这个回调函数有两个参数:第一个参数:真实的dom元素 第二个元素:标签与指令之间绑定关系的对象          
            'text-danger':function(element,binding){
                element.innerText = binding.value
                element.style.color = 'red'
            }
        }
        })
    </script>
</body>

(2)对象式方式

 directives: {
	 // 对象式
	'bind-blue': {
	 // 这个对象中的三个方法的名字不能随便写,这个三个函数将来都会自动被调用
	// 元素与指令初次绑定的时候,会自动调用bind
	// 注意:在特定的时间节点调用特定的函数,这种被调用的函数称为钩子函数
	bind(element, binding) {
	    element.value = binding.value
     },
	// 元素被插入到页面之后,这个函数自动被调用
	inserted(element, binding) {
		element.parentNode.style.backgroundColor = 'blue'
	},
	// 当模板重新解析的时候,这个函数会被自动调用
	update(element, binding) {
		element.value = binding.value
  	}
 }

4.template

template标签/元素只是起到占位的作用,不会真正的出现在页面上,也不会影响页面的结构

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

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

相关文章

【Java】解决Java报错:IllegalStateException during HTTP Request

文章目录 引言一、IllegalStateException的定义与概述1. 什么是IllegalStateException&#xff1f;2. IllegalStateException在HTTP请求中的常见触发场景3. 示例代码 二、解决方案1. 确保响应只被提交一次2. 正确管理Servlet的生命周期3. 避免重复访问输入流和输出流4. 使用框架…

光储充行业市场前景以及未来发展趋势

光储充行业作为新能源汽车产业链的重要环节&#xff0c;其市场前景广阔&#xff0c;未来发展趋势也呈现出积极向上的态势。随着新能源汽车市场的不断扩大&#xff0c;光储充设施的需求也日益增长&#xff0c;为行业的发展提供了强大的动力。 从未来发展趋势来看&#xff0c;光储…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4251(SPI接口)的数字电位器Proteus仿真

一、简介&#xff1a; MCP4251是一款SPI接口的8位数字电位器。 二、主要技术参数&#xff1a; 属性参数值抽头数257接口类型SPI通道数2供电电压1.8V~5.5V精度20%温度系数(典型值)150ppm/℃工作温度-40℃~125℃ 三、引脚定义 &#xff1a; 四、内部原理框图&#xff1a; 五、电…

Github2024-06-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4JavaScript项目2Lua项目1PHP项目1Blade项目1非开发语言项目1TypeScript项目1Shell项目1从零开始构建你喜爱的技术 创建周期:2156 天…

爬虫-电影影评爬取

先上代码 import requests import timeheaders {"referer": "http://movie.mtime.com/","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36" } fo…

linux 安装sftp及使用sftp上传和下载

一、centos7 安装sftp 1.安装 OpenSSH 服务&#xff1a; sudo yum install openssh-server2.启动 SSH 服务&#xff0c;并设置为开机启动&#xff1a; sudo systemctl start sshd sudo systemctl enable sshd3.创建一个新用户&#xff0c;用于SFTP连接&#xff08;替换your_…

Go基础编程 - 06 - 指针

指针 1.1 指针类型、指针地址1.2 指针取值&#xff08;*&#xff09;1.3. 空指针1.4. 语法糖1.5. new()、make() 上一篇&#xff1a;数组与切片 下一篇&#xff1a;map 及其约束 Go不能进行偏移或运算&#xff0c;是安全指针。取址符&#xff08;&&#xff09;&#xff0c…

嵌套查询(二)-谓词EXISTS实现嵌套查询

一、EXISTS谓词 1、作用&#xff1a;用于判断一个子查询的结果是否为空 2、使用语法&#xff1a; 【NOT】EXISTS&#xff08;子查询&#xff09; 语义&#xff1a;如果子查询的查询结果不为空&#xff0c;则EXISTS为真&#xff0c;否则为假 二、举例 1、举例1&#xff1a…

有没有硅基生命?AGI在哪里?

摘要 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;和生命科学的探索逐渐成为人们关注的焦点。其中&#xff0c;关于硅基生命的可能性与AGI&#xff08;Artificial General Intelligence&#xff0c;即人工通用智能&#xff09;的实现&#xff0c;更是引…

函数式开发接口( Consumer、Function)在实际开发中的应用场景

之前有个扫码下载文件需求&#xff0c;由于要同时进行记录下载人的记录。一开始用的是异步进行日志记录。发现有的用户扫码下载了一次文件&#xff0c;日志记录了三条。这种很容易联想到是因为网络抖动造成的。 问题代码 由于日志记录是异步的&#xff0c;文件下载需要时间。同…

场外期权能不能开户?场外期权在哪里开?

今天带你了解场外期权能不能开户&#xff1f;场外期权在哪里开&#xff1f;近年来&#xff0c;场外期权交易在金融市场上逐渐盛行起来。有许多人对于场外期权的开户问题感到困惑。 场外期权能不能开户&#xff1f; 资质要求&#xff1a; 个人投资者需要具备一定的金融知识和投…

Excel根据身份证号提取信息

概览 本篇文章主要对根据身份证号码提取出生年月日、年龄、性别、退休年龄这三项进行讲解。 一. 提取出生年月日 公式&#xff1a;TEXT(MID(B2,7,8),“0000-00-00”) MID(B2,7,8)&#xff1a;表示从单元格 B2 中的字符串&#xff08;这里是身份证号&#xff09;&#xff0c…

SolarONE:新一代开放灵活高效的车载网络仿真测试软件

在当前汽车设计中&#xff0c;车载总线系统扮演着至关重要的角色&#xff0c;它连接了车辆内部的各种电子控制单元&#xff08;ECU&#xff09;&#xff0c;实现了数据的传输与交换。为了更好地理解和优化车载总线系统&#xff0c;软件工具的使用变得至关重要。 本文将介绍一款…

二十三、生成帮助文档

二十一、Java工具类的创建 二十二、Jar包制作及使用 这一篇开始学习如何生成帮助文档。为什么要学习生成帮助文档&#xff1f; 1、工具类已经制作好了&#xff0c;Java工具类的创建的类是一个.java文件&#xff0c;编译后成.class文件看不懂&#xff0c;所以需要对应的帮助文档…

光伏电站阵列式冲击波声压光伏驱鸟器

光伏电站内鸟群的聚集可不是一件好事&#xff0c;鸟类排泄物&#xff0c;因其粘度大、具有腐蚀性的特点&#xff0c;一旦堆积在太阳能板上&#xff0c;会严重影响光伏电站的发电效率。长期积累的鸟粪不仅难以清洗&#xff0c;还可能引发组件的热斑效应&#xff0c;严重时甚至可…

大模型推理优化

什么是大模型推理 **大模型推理其实就是大模型如何输出&#xff0c;怎么输出&#xff0c;输出什么的过程。**在人工智能的基础模型下&#xff0c;各种推理任务涵盖了多个领域&#xff0c;包括常识推理、数学推理、逻辑推理、因果推理、视觉推理、听觉推理、多模态推理和代理推…

【SpringBoot+Vue】后端代码学习记录——登录功能开发

参考资料 https://www.cnblogs.com/three-fighter/p/14332288.html 零、前端开发 略。之前有过。 一、后端开发 1、统一结果封装 创建了一个 Result 类&#xff0c;用于异步统一返回的结果封装。一般来说&#xff0c;结果里面有几个要素必要的 是否成功&#xff0c;可用 c…

哪个牌子的儿童护眼灯好?五款平价护眼台灯推荐

护眼台灯在近年来成为家长和长时间使用电子设备人群关注的家电/学生产品。对于家中有孩子或经常面对电子屏幕的人士来说&#xff0c;很多人可能已经对这类产品有所了解并进行了购买。然而&#xff0c;部分家长对护眼台灯的认识还不够深入&#xff0c;因此尚未为孩子选择一款合适…

怎么写自动注册苹果ID的工具,会用到哪些源代码?

在数字化时代&#xff0c;苹果ID成为了连接苹果生态系统中各项服务的关键桥梁&#xff0c;然而&#xff0c;手动注册苹果ID的过程往往繁琐且耗时&#xff0c;因此&#xff0c;开发一款能够自动注册苹果ID的工具成为了许多开发者的追求。 本文将科普如何编写这样的工具&#xf…

每日一练:攻防世界:Misc文件类型

给了一个txt文本文件&#xff0c;因为题目是文件类型&#xff0c;我先开始一直在想关于文件头的知识。 这串数据看着像十六进制数据&#xff0c;我就直接把他转ASCII了 反转一下就是base64&#xff0c;因为base64没有_&#xff0c;所以去掉46ESAB_&#xff0c;base64解码Hex试…