Vue.js 条件渲染和列表渲染

news2025/1/13 19:37:57

Vue.js 条件渲染和列表渲染

今天我们来聊聊 Vue.js 的两个基础功能:条件渲染列表渲染。这是写前端页面时必备的技能,掌握好它们,你就能轻松应对页面上的动态显示需求。

一、什么是条件渲染?

所谓条件渲染,就是根据某些条件决定是否显示某个内容。比如你想在页面上展示“登录”按钮,但用户已经登录了,就应该展示“退出”按钮。这就是一个典型的条件渲染场景。

在 Vue.js 中,我们用指令 v-ifv-else 来实现条件渲染。先看个简单例子:

<div id="app">
  <button v-if="isLoggedIn">退出</button>
  <button v-else>登录</button>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    isLoggedIn: false
  }
});
</script>

解释一下:

  • isLoggedIntrue 时,页面只会显示“退出”按钮。
  • isLoggedInfalse 时,页面会显示“登录”按钮。
v-if 的另一个朋友:v-else-if

有时候我们不仅仅是两种情况,还需要多种条件。这时候可以用 v-else-if

<div id="app">
  <p v-if="score >= 90">优秀</p>
  <p v-else-if="score >= 60">及格</p>
  <p v-else>不及格</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    score: 75
  }
});
</script>

解释一下:

  • 如果 score 大于等于 90,显示“优秀”。
  • 如果 score 大于等于 60 且小于 90,显示“及格”。
  • 如果都不满足,就显示“不及格”。

二、v-show:一种高效的条件渲染

除了 v-if,Vue 还提供了 v-show。它的用法和 v-if 很像,但背后的实现有点不一样:

  • v-if 是真正的条件渲染,元素会被添加或移除到 DOM 中。
  • v-show 只是通过 display: none; 隐藏元素,DOM 结构始终保留。

什么时候用哪个?

  • 如果你需要频繁切换元素的显示状态,推荐用 v-show,因为效率更高。
  • 如果显示状态变化很少,比如页面加载时只显示一次,用 v-if 更合适。

来看个例子:

<div id="app">
  <p v-show="isVisible">这是一条提示信息</p>
  <button @click="toggle">切换显示</button>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    isVisible: true
  },
  methods: {
    toggle() {
      this.isVisible = !this.isVisible;
    }
  }
});
</script>

点击按钮会切换文字的显示和隐藏。这里用 v-show 非常高效。

三、什么是列表渲染?

条件渲染搞定了单个元素的显示和隐藏,但如果是多个数据呢?这时候就要用到 列表渲染,也就是用 v-for 来循环渲染数据。

来看个例子:

<div id="app">
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    items: [
      { id: 1, name: '苹果' },
      { id: 2, name: '香蕉' },
      { id: 3, name: '橙子' }
    ]
  }
});
</script>

解释一下:

  • v-for="item in items" 表示对 items 数组中的每个元素进行循环。
  • :key="item.id" 是必须的,它是每个元素的唯一标识,用于优化性能。
  • {{ item.name }} 会显示每个元素的名字。

最终页面上会渲染出一个带有苹果、香蕉、橙子的列表。

四、带索引的列表渲染

如果你还需要知道当前循环到了第几个元素,可以用 index

<ul>
  <li v-for="(item, index) in items" :key="item.id">
    {{ index + 1 }}. {{ item.name }}
  </li>
</ul>

这里的 index 是从 0 开始计数的,所以我们用 index + 1 来显示更符合直觉的序号。

五、条件渲染结合列表渲染

如果你想对列表中的每个元素再加个条件,比如只显示价格大于 10 的商品,可以这样写:

<ul>
  <li v-for="item in items" :key="item.id" v-if="item.price > 10">
    {{ item.name }} - {{ item.price }}元
  </li>
</ul>

但注意:Vue 不推荐在 v-for 内直接用 v-if,因为这样会导致性能问题。如果需要过滤数据,建议先用计算属性处理好:

<ul>
  <li v-for="item in filteredItems" :key="item.id">
    {{ item.name }} - {{ item.price }}元
  </li>
</ul>

<script>
new Vue({
  el: '#app',
  data: {
    items: [
      { id: 1, name: '苹果', price: 12 },
      { id: 2, name: '香蕉', price: 8 },
      { id: 3, name: '橙子', price: 15 }
    ]
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => item.price > 10);
    }
  }
});
</script>

六、总结

  • 条件渲染v-ifv-elsev-else-if,还有 v-show,分别适合不同场景。
  • 列表渲染v-for,可以循环数组,支持 key 属性和索引。
  • 不要在 v-for 中直接用 v-if,需要结合计算属性优化性能。

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

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

相关文章

支付宝租赁小程序提升租赁行业效率与用户体验

内容概要 在当今数字化的世界里&#xff0c;支付宝租赁小程序的出现构建了一种新的租赁模式&#xff0c;使得用户在使用过程中体验更加流畅。想象一下&#xff0c;你在寻找租赁服务时&#xff0c;不再需要繁琐的流程和冗长的等待&#xff0c;只需通过手机轻松点击几下&#xf…

关于使用FastGPT 摸索的QA

近期在通过fastGPT&#xff0c;创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上&#xff0c;可以定义业务逻辑&#xff0c;满足输出对话之外的需求。 在最近3个月来的摸索和实践中&#xff0c;一些基于经验的小问题点&#xff08;自己也常常…

服务器/电脑与代码仓gitlab/github免密连接

git config --global user.name "xxxx" git config --global user.email "xxxxxx163.com" #使用注册GitHub的邮箱 生成对应邮箱的密码对 ssh-keygen -t rsa -b 4096 -C "xxxxxx163.com" 把公钥id_rsa.pub拷贝到github中 Setting----->…

【C语言系列】函数递归

函数递归 一、递归是什么&#xff1f;1.1尾递归 二、递归的限制条件三、递归举例3.1举例一&#xff1a;求n的阶乘3.2举例二&#xff1a;顺序打印一个整数的每一位 四、递归与迭代4.1举例三&#xff1a;求第n个斐波那契数 五、拓展学习青蛙跳台问题 一、递归是什么&#xff1f; …

springboot 默认的 mysql 驱动版本

本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…

[QCustomPlot] 交互示例 Interaction Example

本文是官方例子的分析: Interaction Example 推荐笔记: qcustomplot使用教程–基本绘图 推荐笔记: 4.QCustomPlot使用-坐标轴常用属性 官方例子需要用到很多槽函数, 这里先一次性列举, 自行加入到qt的.h中.下面开始从简单的开始一个个分析. void qcustomplot_main_init(void); …

openMetaData docker方式安装部署记录

OpenMetadata一站式元数据管理平台&#xff0c;是一款功能强大的开源元数据管理平台&#xff0c;旨在帮助企业更好地发现、理解和管理其数据资产。它提供了一套全面的工具和功能&#xff0c;涵盖了数据发现、数据血缘、数据质量、数据探查、数据治理和团队协作等多个方面。 那…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu&#xff0c; 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

Spring Boot 支持哪些日志框架

Spring Boot 支持多种日志框架&#xff0c;主要包括以下几种&#xff1a; SLF4J (Simple Logging Facade for Java) Logback&#xff08;默认&#xff09;Log4j 2Java Util Logging (JUL) 其中&#xff0c;Spring Boot 默认使用 SLF4J 和 Logback 作为日志框架。如果你需要使…

快速导入请求到postman

1.确定请求&#xff0c;右键复制为cURL(bash) 2.postman菜单栏Import-Raw text&#xff0c;粘贴复制的内容保存&#xff0c;请求添加成功

Golang的网络流量分配策略

## 1. Golang中的网络流量分配策略 简介 在Golang中&#xff0c;网络流量分配策略是指如何有效地管理和优化网络请求的分配&#xff0c;以提高系统的性能和稳定性。优秀的网络流量分配策略能够使系统更好地应对高并发和大流量的情况&#xff0c;同时有效地避免网络拥堵和性能瓶…

【硬件介绍】Type-C接口详解

一、Type-C接口概述 Type-C接口特点&#xff1a;以其独特的扁头设计和无需区分正反两面的便捷性而广受欢迎。这种设计大大提高了用户的使用体验&#xff0c;避免了传统USB接口需要多次尝试才能正确插入的问题。Type-C接口内部结构&#xff1a;内部上下两排引脚的设计虽然可能不…

二、BIO、NIO编程与直接内存、零拷贝

一、网络通信 1、什么是socket&#xff1f; Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;它是一组接口&#xff0c;一般由操作 系统提供。客户端连接上一个服务端&#xff0c;就会在客户端中产生一个 socket 接口实例&#xff0c;服务端每接受 一个客户端…

Android车机DIY开发之软件篇(九)默认应用和服务修改

Android车机DIY开发之软件篇(九)默认应用和服务修改 默认应用位置 ~/packages/apps/Car 增加APP 1.增加 XXXX.app 和Android.mk 2. 修改~/build/make/target/product/handheld_system_ext.mk 默认服务位置 ~/frameworks/base/services/java/com/android/server 查看服务列…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误&#xff08;Recoverable Errors&#xff09; 2.2 不可恢复错误&#xff08;Unrecoverable Errors&#xff09; 三、Rust 的错误处理机制 3…

DDD - 微服务设计与领域驱动设计实战(上)_统一建模语言及事件风暴会议

文章目录 Pre概述业务流程需求分析的困境统一语言建模事件风暴会议什么是事件风暴&#xff08;Event Storming&#xff09;事件风暴会议 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对…

用HTML + CSS实现太极图

目录 一、效果图 二、实现思路 三、完整代码 四、总结 一、效果图 如图所示&#xff0c;太极图一半为黑色&#xff08;代表阴&#xff09;&#xff0c;另一半为白色&#xff08;代表阳&#xff09;。这两部分相互环绕&#xff0c;形成一种流动的、旋转的感觉。 二、实现思…

Apache Hadoop YARN框架概述

一、YARN产生和发展简史 1.1背景 数据、程序、运算资源&#xff08;内存、CPU&#xff09;三者组在一起&#xff0c;才能完成数据的计算处理过程。在单机环境下&#xff0c;三者之间协调配合不是太大问题。为了应对海量数据的处理场景&#xff0c;Hadoop软件出现并提供了分布…

一个个顺序挨着来 - 责任链模式(Chain of Responsibility Pattern)

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;概述责任链结构图责任链模式概述责任链模式涉及的角色 talk is c…