《Vue 指令详解:为页面增添活力》

news2024/11/28 11:37:45

一、Vue 指令概述

Vue 指令是 Vue.js 框架中非常重要的一部分,它能够为页面增添各种动态效果和交互功能。

在 Vue 中,指令以 “v-” 开头,是一种特殊的属性,用于在模板中对 DOM 元素进行操作。Vue 指令可以实现数据绑定、条件渲染、循环渲染、事件处理等功能,大大提高了开发效率和用户体验。

Vue 指令主要分为以下几类:

  1. 内容渲染指令:包括 v-text、v-html、v-show 和 v-if 等。这些指令用于在模板中渲染文本内容或控制元素的显示和隐藏。
    • v-text:类似于 innerText,将数据渲染到元素的文本内容中,会覆盖原有内容。
    • v-html:类似于 innerHTML,将数据渲染到元素的 HTML 内容中,可以解析 HTML 标签。
    • v-show:通过切换元素的 display 属性来控制元素的显示和隐藏,频繁切换显示隐藏时使用。
    • v-if:根据表达式的值来判断是否创建或移除元素节点,适用于不频繁切换的场景。
  1. 事件绑定指令:使用 v-on 指令可以绑定元素的事件监听器,如点击事件、鼠标移动事件等。可以使用简写形式 “@事件名” 来绑定事件。事件绑定指令可以实现与用户的交互功能。
  1. 属性绑定指令:使用 v-bind 指令可以动态绑定元素的属性,如 src、href、class 等。可以使用简写形式 “: 属性名” 来绑定属性。属性绑定指令可以实现根据数据动态设置元素属性的功能。
  1. 列表渲染指令:使用 v-for 指令可以循环渲染数组或对象,生成多个相同结构的元素。v-for 指令可以实现动态生成列表的功能。
  1. 双向绑定指令:使用 v-model 指令可以实现表单元素的双向数据绑定,即表单元素的值与 Vue 实例中的数据相互同步。v-model 指令可以实现用户输入与数据的实时交互。

除了上述常见的指令外,Vue 还提供了一些高级指令,如 v-once、v-pre 和 v-cloak 等。这些指令在特定场景下可以发挥重要作用:

  1. v-once:让元素或组件只渲染一次,不再随数据的变化而重新渲染。适用于静态内容或优化性能的场景。
  1. v-pre:跳过指定元素及其子元素的编译过程,直接将其原始内容渲染到页面上。适用于提高性能或避免解析冲突的场景。
  1. v-cloak:防止页面加载时,展示 Vue 实例尚未编译完成的模板。通过在 CSS 中定义隐藏元素的类,确保 Vue 实例编译完成后再显示元素,避免页面出现短暂的未编译内容的闪烁。

二、常见 Vue 指令作用

1. v-bind

  • 给标签属性设置变量的值,语法有多种形式,如v-bind:属性名="变量"或:属性名="变量"。这个指令可以让 HTML 标签的某个属性的值产生动态效果。编译前:<html标签 v-bind:参数 = "表达式">,编译后:<html标签 参数 = "表达式">。注意,在编译的时候v-bind后面的 “参数名” 会被编译为 HTML 标签的 “属性名”,表达式会关联data,当data发生改变之后,表达式的执行结果就会发生变化,从而产生动态效果。v-bind因为很常用,所以 Vue 框架对该指令提供了一种简写方式:<html标签 :参数 = "表达式">。
  • 对于样式控制有增强作用,可以操作class和style。例如,可以使用v-bind指令将一个组件的class属性绑定到 Vue 实例的数据上,如<h1 v-bind:class="myClass">这是一个标题</h1><button @click="changeClass">改变样式</button>,当 Vue 实例的myClass属性发生变化时,h1标签的class属性也会相应地发生变化。还可以使用简写形式的v-bind指令,如<h1 :class="myClass">这是一个标题</h1><button @click="changeClass">改变样式</button>。同样,v-bind指令也可以用于将组件的style属性与 Vue 实例的数据绑定在一起,如<h1 :style="{ color: myColor }">这是一个标题</h1><button @click="changeColor">改变颜色</button>,当 Vue 实例的myColor属性发生变化时,h1标签的color样式也会相应地发生变化。此外,v-bind指令还可以用于将组件的属性与 Vue 实例的数据绑定在一起,如<input type="text":value="message">,当 Vue 实例的message属性发生变化时,input标签的value属性也会相应地发生变化。最后,v-bind指令可以用于动态地绑定组件的属性和样式,如<h1 :class="{ red: isRed, bold: isBold }">这是一个标题</h1><button @click="toggleRed">切换颜色</button><button @click="toggleBold">切换粗体</button>,当 Vue 实例的isRed或isBold属性发生变化时,h1标签的class属性也会相应地发生变化。

2. v-on

  • 给标签绑定事件,语法有v-on:事件名="函数"或@click="函数"。v-on指令的作用是为元素绑定事件,事件名不用写on,指令可简写为@。绑定的方法写在methods属性中,方法内部可以通过this关键字访问定义在data中的数据。例如,<div id="app"><input type="button" value="事件绑定" v-on:click="doIt"><input type="button" value="事件绑定" v-on:monseenter="doIt"><input type="button" value="事件绑定" v-on:dblclick="doIt"></div>,或者<div id="app"><input type="button" value="v-on指令" v-on:click="doIt"><input type="button" value="v-on简写" @click="doIt"><input type="button" value="双击事件" @dblclick="doIt"><h3 @click="changeFood">{{food}}</h3></div>。
  • 注意:Vue 让提供所有的methods中的函数,this都指向当前实例。

3. v-model

  • 给表单元素使用,双向数据绑定,可快速获取或设置表单元素内容。双向数据绑定指令v-model基于响应式原理的属性绑定和元素事件监听实现双向响应式功能。取值随表单控件类型不同而不同,仅限于 HTML 表单元素和组件,如<input>、<select>、<textarea>等。语法:<input type="text" v-model="name">。修饰符:.lazy取代input监听change事件;.number输入字符串转为有效的数字;.trim输入首尾空格过滤。v-model表示双向数据绑定,JS 变量变换 => 页面(响应式数据劫持操作),页面元素的数据操作 => JS 变量变换(事件绑定对变量修改的操作)。v-model只支持基本仓库变量,不支持除此之外的任何其他取值。因此能够使用v-model指令的只有表单元素中的数据控制元素,如input type=text,password,number,……、textarea、select、input type=radio、input type=checkbox。所以v-model实际上就是 Vue 提供的v-bind + v-on同时绑定的语法糖指令。
  • 数据变化时视图自动更新,视图变化时数据自动更新。双向数据绑定就是更改两边的数据任何一边,它们都会同步更新对方的值。

4. v-text 和 v-html

  • v-text用于渲染 DOM 元素的文本内容,不识别标签。v-text指令用于将数据填充到标签中,作用与插值表达式类似,但是没有闪动问题。如果数据中有 HTML 标签会将 HTML 标签一并输出。注意:此处为单向绑定,数据对象上的值改变,插值会发生变化;但是当插值发生变化并不会影响数据对象的值。
  • v-html识别标签,用于渲染包含 HTML 标签的内容。v-html用法和v-text相似,但是它可以将 HTML 片段填充到标签中,可能有安全问题,一般只在可信任内容上使用v-html,永不用在用户提交的内容上。它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行 HTML 解析,但v-html会将其当 HTML 标签解析后输出。

5. v-show 和 v-if

  • v-show可以用display:none方式显示和隐藏 dom,频繁切换时使用。v-show指令,当指令是true时就显示,是false就隐藏。
  • v-if直接从 dom 上移除元素,适用于不频繁切换的场景。可以跟v-else-if和v-else配合使用。v-if控制元素显示或隐藏是把 DOM 元素整个的渲染或者删除,如果删除,也就是页面中不存在这个 DOM 元素,以此达到隐藏的效果。v-if在每次切换的时候都会重新创建或者销毁元素,有较高的切换性能消耗。v-if是惰性的,如果在初始渲染时条件为假,那就什么也不做,直到条件第一次变为真时,需要渲染时才会开始渲染条件块。v-show则是无论你的初始条件是什么,元素都会被渲染,就是 DOM 元素始终是存在的,v-show只是通过控制 CSS 中的display属性来控制他的显示或隐藏,它拥有比较高的初始渲染消耗。如果元素需要进行比较频繁的切换的话,推荐使用v-show;如果很少用到切换,或者元素可能永远都不会显示出来的话,就使用v-if。

6. v-for

  • 基于数据循环,多次渲染整个元素,语法为v-for='(item(值),index(索引))' in 数据 :key="item(值)"。使用v-for指令可以循环渲染数组或对象,生成多个相同结构的元素。例如,基于数组进行循环渲染:<div v-for="(item, index) in array" :key="item">{{ item }}</div>,其中array是一个数组,item代表数组中的每个元素,index代表元素的索引。
  • 数组长度的更新会同步到页面上,是响应式的。当数组的长度发生变化时,使用v-for渲染的页面也会相应地更新。

三、Vue 指令为页面增添活力的方法

1. 使用过渡动画

过渡动画是指在 DOM 元素从一个状态到另一个状态发生变化时,通过添加过渡效果使得这个变化看起来更加平滑自然。

1. CSS 过渡:使用transition组件,通过设置 CSS 样式或绑定动态 class 来实现过渡动画的效果。例如,可以通过以下步骤实现 CSS 过渡动画:

  • 在 Vue 组件的<style>标签中定义过渡效果的 CSS 类名。例如:
 

.fade-enter-active,.fade-leave-active {

transition: opacity 0.5s;

}

.fade-enter-from,.fade-leave-to {

opacity: 0;

}

  • 在模板中使用<transition>组件包裹需要过渡的元素,并指定过渡的名称。例如:
 

<transition name="fade">

<div v-if="show">Hello, Vue.js!</div>

</transition>

2. JS 过渡:使用 JavaScript 过渡可以更加灵活地控制过渡动画,通过transition组件的事件钩子函数来自定义过渡效果。

  • JavaScript 钩子函数:Vue 的<transition>组件提供了一些 JavaScript 钩子函数,如@enter、@leave等,可以在动画的不同阶段执行 JavaScript 代码。例如:
 

<transition name="fade" @enter="enterHook" @leave="leaveHook">

<div v-if="show" class="box">Hello, Vue.js!</div>

</transition>

在组件的<script>部分添加钩子函数:

 

methods: {

toggle() {

this.show =!this.show;

},

enterHook(el, done) {

console.log('entering');

done();

},

leaveHook(el, done) {

console.log('leaving');

done();

}

}

  • 使用gsap库实现动画:如果希望通过 JavaScript 来实现一些更复杂的动画效果,可以选择使用gsap库。安装gsap库后,在组件中导入并使用。例如:
 

import gsap from "gsap";

// 在需要的地方使用

gsap.to(element, { duration: 1, opacity: 0.5 });

2. 动态添加元素

在 Vue.js 中,可以通过编程的方式动态添加元素到页面中,增加页面的动态性和交互性。

可以使用以下方法动态添加元素:

  • 通过编程方式创建 Vue 组件实例并挂载到目标元素中。例如:
 

const ButtonClass = Vue.extend(ButtonComponent);

const buttonInstance = new ButtonClass({ propsData: { /* 传递所需的属性 */ } });

buttonInstance.$mount();

targetElement.appendChild(buttonInstance.$el);

  • 使用v-for循环遍历数组动态生成元素。例如:
 

<div v-for="(demo, index) in numbs" :key="index">

<div class="heading">{{demo}}</div>

<button class="info">View</button>

<button class="edit">Edit</button>

<img class="place" src="../images/imageinsert.jpg" />

<div class="summary" v-for="(apps, index) in applications" :key="index">

Application Version {{apps.ver}}{{apps.status}}, {{apps.deploymentD}}, {{apps.deploymentC}}

</div>

</div>

3. 代码优化中的指令优化

  1. 尽量减少不必要的v-model和v-bind更新,特别是在大规模列表渲染中。在处理大量数据时,频繁的更新可能会导致性能问题。可以通过合理的设计数据结构和逻辑,避免不必要的更新操作。
  1. 使用v-for时提供唯一key,以利于 Vue 内部高效的 DOM 更新策略。在使用v-for循环渲染元素时,为每个元素提供一个唯一的key属性,这有助于 Vue 更高效地跟踪和更新 DOM 节点。例如:
 

<ul>

<li v-for="item in items" :key="item.id">{{ item.text }}</li>

</ul>

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

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

相关文章

RHCE——SELinux

SELinux 什么是SELinux呢&#xff1f;其实它是【Security-Enhanced Linux】的英文缩写&#xff0c;字母上的意思就是安全强化Linux的意思。 SELinux是由美国国家安全局(NSA)开发的&#xff0c;当初开发的原因是很多企业发现&#xff0c;系统出现问题的原因大部分都在于【内部…

Vue3的通灵之术Teleport

前言 近期Vue3更新了一些新的内容&#xff0c;我都还没有一个一个仔细去看&#xff0c;但是还是有必要去解读一下新内容的。就先从Teleport 开始吧。 官方对 Teleport 的解释是&#xff1a;<Teleport> 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传…

介绍一下atof(arr);(c基础)

hi , I am 36 适合对象c语言初学者 atof(arr)&#xff1b;是返回浮点数(double型)&#xff0c;浮点数数是arr数组中字符中数字 格式 #include<stdio.h> atof(arr); 返回值arr数组中的数 未改变arr数组 #include<stdio.h> //atof(arr) 返 <stdlib> int…

STM32 USART配置库函数

单片机学习&#xff01; 目录 一、USART配置函数 1.1 USART_DeInit函数 1.2 USART_Init函数 1.3 USART_StructInit函数 二、配置同步时钟输出函数 2.1 USART_ClockInit函数 2.2 USART_ClockStructInit函数 三、USART的外设与中断函数 3.1 USART_Cmd函数 3.2 USART_IT…

通俗理解人工智能、机器学习和深度学习的关系

最近几年人工智能成为极其热门的概念和话题&#xff0c;可以说彻底出圈了。但人工智能的概念在1955年就提出来了&#xff0c;可以说非常古老。我在上小学的时候《科学》课本上就有人工智能的概念介绍&#xff0c;至今还有印象&#xff0c;但那些年AI正处于“寒冬”&#xff0c;…

2024数学建模亚太赛【C题】赛题详细解析

目录 &#x1f4d1;一、竞赛时间 &#x1f5dd;️二、奖项设置 ✏️三、选题思路 &#x1f50d;阶段一&#xff1a;【数据预处理与探索性分析】 1.【数据清洗与预处理】 2.【探索性数据分析&#xff08;EDA&#xff09;】 &#x1f50d;阶段二&#xff1a;【时间序列建模…

数据结构 【堆实现】

上文提到堆是一种特殊的二叉树&#xff0c;其中它的父结点均不大于或者不小于其子结点的值。堆总是一棵完全二叉树。其中&#xff0c;堆的父节点全部不小于它的子结点时称为大堆&#xff0c;堆的父结点全部不大于其子结点的堆称为小堆。 堆可以由两种结构来实现&#xff0c;分别…

【AI绘画】Midjourney进阶:色调详解(下)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;Midjourney中的色彩控制为什么要控制色彩&#xff1f;为什么要在Midjourney中控制色彩&#xff1f; &#x1f4af;色调纯色调灰色调暗色调 &#x1f4af…

[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 一个合法的IP地址是什么样的&#xff1a; 有3个’.分割得到4个数&#xff0c;每个数第一个数不能是0&#xff0c;不能含有非法字符&#xff0c;不能大于255。 这个是否属于合法IP相当于一个分割问题&#xff0c;把一串字符串分割成4部分&#xff0c;分别判断每…

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法&#xff0c;但并没有太多关注&#xff0c;直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》&#xff0c;为了同时整合两类数据&#xf…

贴代码PasteForm框架之框架核心帮助类PasteFormHelper说明

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…

杂7杂8学一点之ZC序列

重要的放在前面&#xff0c;优秀文章链接&#xff1a;5GNR漫谈13&#xff1a;Zadoff –Chu&#xff08;ZC&#xff09;序列性质 目录 1. ZC序列 1.1 ZC序列的表达式 1.2 ZC序列的特点 2. PRACH中的ZC序列 2.1 为什么要有逻辑根序列与物理根序列的概念 1. ZC序列 ZC序列&…

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习的算法&#xff0c;在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层&#xff08;Pooling Layer&#xff09;、全连…

【Linux】—简单实现一个shell(myshell)

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦&#xff01; 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&…

基于 Flask 和 RabbitMQ 构建高效消息队列系统:从数据生成到消费

简介 在构建 Web 应用时&#xff0c;处理和传输大量数据是不可避免的。对于需要高效、可扩展的消息处理和异步任务执行的场景&#xff0c;使用 RabbitMQ&#xff08;一种流行的消息队列中间件&#xff09;与 Flask&#xff08;一个轻量级的 Python Web 框架&#xff09;结合&a…

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…

机器学习模型——线性回归

文章目录 前言1.基础概念2.代价函数3.单变量线性回归3.1加载数据3.2初始化超参数3.3梯度下降算法3.3.1初次梯度下降3.3.2 多次梯度下降3.3.3结果可视化 前言 随着互联网数据不断累积&#xff0c;硬件不断升级迭代&#xff0c;在这个信息爆炸的时代&#xff0c;机器学习已被应用…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中非常重要的一部分&#xff0c;它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时&#xff0c;可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)

排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序&#xff0c;排序是一项极其重要的技能 接下…

【JavaEE初阶 — 网络原理】初识网络原理

目录 1. 网络发展史 1.1 独立模式 1.2 网络互连 1.2.1 网络互联的背景 1.2.2 网络互联的定义 1.3 局域网LAN 1.4 广域网WAN 2. 网络通信基础 2.1 IP地址 2.2 端口号 2.3 认识协议 2.4 五元组 2.5 协议分层 2.5.1 分…