「Vue3系列」Vue3 条件语句/循环语句

文章目录

  • 一、Vue3 条件语句
    • 1. v-if
    • 2. v-else-if 和 v-else
    • 3. v-show
    • 4. 使用计算属性进行条件渲染
    • 5. v-if与v-show比较
      • v-if
      • v-show
      • 性能考虑
      • 使用场景
  • 二、Vue3 循环语句
    • 1. 遍历数组
    • 2. 遍历对象
    • 3. 使用索引
    • 4. 注意事项
  • 三、相关链接

一、Vue3 条件语句

在 Vue 3 中,你可以使用条件语句来动态地控制模板中的渲染内容。Vue 提供了多种方式来实现条件渲染,包括 v-ifv-else-ifv-elsev-show 指令。

1. v-if

v-if 指令用于根据条件来渲染一个元素或组件。如果条件为真,元素或组件会被渲染到 DOM 中;如果条件为假,元素或组件不会被渲染。

<template><div><p v-if="isVisible">这段文字将会显示</p></div>
</template><script>
export default {data() {return {isVisible: true};}
};
</script>

在这个例子中,isVisible 是一个布尔值,当它为 true 时,<p> 元素会被渲染到 DOM 中;当它为 false 时,<p> 元素不会被渲染。

2. v-else-if 和 v-else

你可以使用 v-else-ifv-else 来添加额外的条件。

<template><div><p v-if="score > 90">优秀</p><p v-else-if="score > 60">及格</p><p v-else>不及格</p></div>
</template><script>
export default {data() {return {score: 80};}
};
</script>

在这个例子中,根据 score 的值,不同的 <p> 元素会被渲染。

3. v-show

v-show 指令与 v-if 类似,但它不会基于条件来添加或移除元素,而是简单地切换元素的 CSS 的 display 属性。这意味着即使元素被隐藏,它仍然会保留在 DOM 中。

<template><div><p v-show="isVisible">这段文字将会根据条件显示或隐藏</p></div>
</template><script>
export default {data() {return {isVisible: false};}
};
</script>

在这个例子中,当 isVisibletrue 时,<p> 元素会显示;当为 false 时,<p> 元素会被隐藏,但它的 DOM 元素仍然存在。

4. 使用计算属性进行条件渲染

对于更复杂的条件逻辑,你可以使用计算属性来返回一个布尔值,并在模板中使用这个布尔值来决定是否渲染某个元素。

<template><div><p v-if="shouldShowMessage">这是一个消息</p></div>
</template><script>
export default {data() {return {userLevel: 2};},computed: {shouldShowMessage() {return this.userLevel >= 2;}}
};
</script>

在这个例子中,shouldShowMessage 是一个计算属性,它返回一个布尔值,表示是否应该显示消息。

5. v-if与v-show比较

在 Vue 3 中,v-ifv-show 都用于条件性地渲染元素,但它们在实现方式和性能上有一些区别。

v-if

v-if 是一个“真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。v-if 是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

特点:

  • 条件为假时,不会渲染元素到 DOM 中。
  • 每次条件改变都会销毁和重建元素及其子组件,包括所有的事件监听器。
  • 条件为假时,不会有任何性能开销,因为 DOM 中没有对应的元素。
  • 更加适合不频繁切换的条件渲染。

v-show

v-show 就简单得多——不论初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

特点:

  • 无论条件真假,元素都会被渲染到 DOM 中。
  • 条件为假时,通过 CSS 设置 display 属性为 none 来隐藏元素。
  • 条件改变时,元素只是简单地从可见变为不可见,不会有销毁和重建的开销。
  • 适合频繁切换的条件渲染。

性能考虑

如果你非常关心性能,并且条件不频繁切换,使用 v-if 会更好,因为这样可以避免不必要的渲染和销毁/重建的开销。然而,如果条件频繁切换,使用 v-show 会更好,因为它只是简单地切换 CSS 属性,而不会涉及组件的销毁和重建。

使用场景

  • 如果一个元素需要非常频繁地切换,使用 v-show 会更好。
  • 如果在运行时条件不太可能改变,或者元素非常重(有很多子组件或监听器),使用 v-if 更好。

在实际应用中,可以根据具体的需求来选择使用 v-if 还是 v-show。在大多数情况下,Vue 的优化足以让这两种方式在性能上相差无几,因此选择哪种方式更多是基于代码的可读性和维护性的考虑。

二、Vue3 循环语句

在 Vue.js 中,你可以使用 v-for 指令来执行循环操作,遍历数组或对象,并基于每个元素或属性渲染一个模板块。

1. 遍历数组

使用 v-for 指令遍历数组时,你可以指定一个别名来代表当前元素,并使用 in 关键字来指定要遍历的数组。

<template><div><ul><li v-for="item in items" :key="item.id">{{ item.text }}</li></ul></div>
</template><script>
export default {data() {return {items: [{ id: 1, text: 'Item 1' },{ id: 2, text: 'Item 2' },{ id: 3, text: 'Item 3' }]};}
};
</script>

在这个例子中,items 是一个包含对象的数组,我们使用 v-for="item in items" 来遍历这个数组,并为每个对象渲染一个 <li> 元素。:key="item.id" 是用来跟踪每个节点的身份,从而重用和重新排序现有元素。

2. 遍历对象

你也可以使用 v-for 来遍历对象的属性。

<template><div><ul><li v-for="(value, name, index) in object" :key="index">{{ name }}: {{ value }}</li></ul></div>
</template><script>
export default {data() {return {object: {firstName: 'John',lastName: 'Doe',age: 30}};}
};
</script>

在这个例子中,object 是一个包含属性的对象。v-for="(value, name, index) in object" 遍历这个对象的每个属性,并输出属性的名称和值。

3. 使用索引

在遍历数组时,你还可以使用第三个参数来获取当前元素的索引。

<template><div><ul><li v-for="(item, index) in items" :key="index">{{ index + 1 }}. {{ item.text }}</li></ul></div>
</template><script>
export default {data() {return {items: [{ text: 'Item 1' },{ text: 'Item 2' },{ text: 'Item 3' }]};}
};
</script>

在这个例子中,我们使用 v-for="(item, index) in items" 来同时获取当前元素和它的索引,然后在列表项中显示索引和文本。

4. 注意事项

  • 当使用 v-for 时,每个节点必须有一个唯一的 key 属性,这有助于 Vue.js 跟踪每个节点的身份,从而实现高效的 DOM 更新。
  • 尽量避免在同一元素上同时使用 v-ifv-for,因为这可能会导致渲染错误。如果确实需要条件渲染,可以考虑将元素包裹在一个父元素中,并在父元素上使用 v-if
  • 当遍历的对象或数组发生变化时,Vue.js 会自动更新 DOM 以反映这些变化。

三、相关链接

  1. Vue3官方地址
  2. Vue3中文文档
  3. 「Vue3系列」Vue3简介及安装
  4. 「Vue3系列」Vue3起步/创建项目
  5. 「Vue3系列」Vue3指令
  6. 「Vue3系列」Vue3 模板语法

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

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

相关文章

盲人出行:科技创造美好的未来

在繁忙的都市中&#xff0c;我每天都要面对许多挑战&#xff0c;盲人出行安全保障一直难以得到落实。我看不见这个世界&#xff0c;只能依靠触觉和听觉来感知周围的一切。然而&#xff0c;我从未放弃过对生活的热爱和对未来的憧憬。在一次机缘巧合下&#xff0c;我认识了一款名…

C3_W2_Collaborative_RecSys_Assignment_吴恩达_中英_Pytorch

Practice lab: Collaborative Filtering Recommender Systems(实践实验室:协同过滤推荐系统) In this exercise, you will implement collaborative filtering to build a recommender system for movies. 在本次实验中&#xff0c;你将实现协同过滤来构建一个电影推荐系统。 …

VLAN实验报告

实验要求&#xff1a; 实验参考图&#xff1a; 实验过程&#xff1a; r1: [r1]int g 0/0/0.1 [r1-GigabitEthernet0/0/0.1]ip address 192.168.1.1 24 [r1-GigabitEthernet0/0/0.1]dot1q termination vid 2 [r1-GigabitEthernet0/0/0.1]arp broadcast enable [r1]int g 0/0/…

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求&#xff1a; 1&#xff1a;在一个页面中显示一张数据表的数据 2&#xff1a;不能使用遍历的方式 3&#xff1a;页面中的数据允许通过admin后台来进行修改 4&#xff1a;把一张数据表的某些内容渲染到[xxx.html]页面 5&#xff1a;如公司的新商品页面&#xff0c;已有固定的…

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…

FDM打印机学习

以下内容摘自网络&#xff0c;仅供学习讨论&#xff0c;侵删。 持续更新。。。 FDM打印机是通过喷头融化丝状耗材&#xff08;PLA&#xff0c;ABS等材料&#xff09;&#xff0c;然后逐层涂在热床上&#xff0c;一层一层逐级抬高。 结构分类 Prusa i3型是一种龙门结构&#…

JavaWeb 下拉菜单怎么实现选择不同的颜色?

在JavaWeb中实现下拉菜单选择不同颜色的功能是一种常见的需求&#xff0c;可以通过HTML、CSS和JavaScript结合Java后端来实现。 第一步&#xff1a;编写HTML页面 首先&#xff0c;我们需要创建一个HTML页面&#xff0c;其中包含一个下拉菜单和一个用于显示颜色的区域。 <…

python 爬取文本内容并写入json文件

背景: 项目需要从html 提取说明书目录 实现: 由于html是包含所有内容,所以将其中目录部分手动重新生成一个html 文件dir26.html python import requests from bs4 import BeautifulSoup import jsonfilename "dir26.html" # 替换为实际的文件路径 with open(fil…

ES 备份索引

1、先创建索引 PUT file_info_sps_demo1 {"settings": {"index": {"number_of_shards": "1","blocks": {"read_only_allow_delete": "true"},"max_result_window": "500000",&quo…

阶跃信号与冲击信号

奇异信号&#xff1a;信号与系统分析中&#xff0c;经常遇到函数本身有不连续点&#xff08;跳变电&#xff09;或其导函数与积分有不连续点的情况&#xff0c;这类函数称为奇异函数或奇异信号&#xff0c;也称之为突变信号。以下为一些常见奇异函数。 奇异信号 单位斜变信号 …

C#双向链表实现:Append()方法追加并显示数据

目录 一、涉及到的知识点 1.定义 2.双向链表与单向链表的区别 二、实例 一、涉及到的知识点 1.定义 在双向链表中&#xff0c;每个节点有两个指针域&#xff0c;一个指向它的前一个节点&#xff08;即直接前驱&#xff09;&#xff0c;另一个指向它的后一个节点&#xff0…

Ubuntu18.04安装RTX2060显卡驱动+CUDA+cuDNN

Ubuntu18.04安装RTX2060显卡驱动CUDAcuDNN 1 安装RTX2060显卡驱动1.1 查看当前显卡是否被识别1.2 安装驱动依赖1.3 安装桌面显示管理器1.4 下载显卡驱动1.5 禁用nouveau1.6 安装驱动1.7 查看驱动安装情况 2 安装CUDA2.1 查看当前显卡支持的CUDA版本2.2 下载CUDA Toolkit2.3 安装…

车灯修复UV胶的优缺点有哪些?

车灯修复UV胶的优点如下&#xff1a; 优点&#xff1a; 快速固化&#xff1a;通过紫外光照射&#xff0c;UV胶可以在5-15秒内迅速固化&#xff0c;提高了修复效率。高度透明&#xff1a;固化后透光率高&#xff0c;几乎与原始车灯材料无法区分&#xff0c;修复后车灯外观更加…

对缓冲区的初步认识——制作进度条小程序

对缓冲区的初步认识--进度条小程序 前言预备知识回车和换行的区别输出缓冲区/n 有清空输出缓冲区的作用stdout是什么&#xff1f;验证一切皆文件为什么是\n行刷新&#xff1f; 倒计时程序原理 代码实现为什么这里要强制刷新&#xff1f;没有会怎样&#xff1f;为什么是输出的是…

RabbitMQ安装及使用

系列文章目录 文章目录 系列文章目录前言一、下载二、安装三、插件安装四、配置五、权限六、集群模式 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&…

【MATLAB源码-第154期】基于matlab的OFDM系统多径信道下块状和梳妆两种导频插入方式误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 OFDM&#xff08;Orthogonal Frequency Division Multiplexing&#xff0c;正交频分复用&#xff09;是一种高效的无线信号传输技术&#xff0c;广泛应用于现代通信系统&#xff0c;如Wi-Fi、LTE和5G。OFDM通过将宽带信道划分…

[机缘参悟-158] :西游记中的“佛” 、“道”之争

目录 前言 一、西游记中的佛教元素 1.1 佛教元素 1.2 西游记佛教思想 1.3 佛教的三界五行&#xff1a;物质世界 1.4 佛教中不在三界内&#xff0c;不在五行中&#xff1a;精神世界 二、西游记中的道教元素 2.1 主要元素 2.2 道家思想 三、“佛”如何兼容“道” 3.1 …

RK3568 Android12 适配抖音 各大APP

RK3568 Android12 适配抖音 各大APP SOC RK3568 system:Android 12 平台要适配抖音和各大APP 平台首先打开抖音发现摄像头预览尺寸不对只存在右上角,我将抖音APP装在手机上预览,发现是全屏 一开始浏览各大博客 给出的解决方法是修改framework 设置为全屏显示: framewo…

2369. 检查数组是否存在有效划分

2369. 检查数组是否存在有效划分 题目链接&#xff1a;2369. 检查数组是否存在有效划分 代码如下&#xff1a; //动态规划 class Solution { public:bool validPartition(vector<int>& nums) {vector<int> dp(nums.size()1,false);//dp[i]表示前i个元素组成的…