0

0

Vue文档中的条件渲染函数实例分析

PHPz

PHPz

发布时间:2023-06-21 10:09:39

|

1539人浏览过

|

来源于php中文网

原创

vue是一款非常流行的javascript框架,它提供了一些方便开发者的工具和功能,让开发者可以更方便地构建复杂的web应用程序。其中,条件渲染函数是vue中一个非常有用的功能,可以帮助开发者动态地控制和渲染页面上的元素。在本文中,我们将对vue文档中的条件渲染函数进行分析和实例演示。

一、Vue的条件渲染函数简介

Vue中可以使用v-if和v-show指令来实现条件渲染。这些指令都可以让我们根据条件来控制某些元素是否需要渲染到页面上。

v-if指令是根据表达式的值来判断是否需要渲染元素,如果表达式的值为真,则渲染该元素;否则,不渲染该元素。例如:

<div v-if="shown">
  这是一个需要被渲染出来的div元素
</div>

在上面的例子中,只有当Vue实例的shown属性值为true时,才会在页面上渲染出这个div元素。

立即学习前端免费学习笔记(深入)”;

v-show指令也可以实现元素的条件渲染,但是它的实现方式和v-if有点不同。v-show指令是根据表达式的值来动态改变元素的display属性,如果表达式的值为真,则将元素的display属性设置为block,从而让元素在页面上显示出来;否则,将元素的display属性设置为none,从而让元素在页面上被隐藏起来。例如:

<div v-show="shown">
  这是一个需要被渲染出来的div元素
</div>

在上面的例子中,只要Vue实例的shown属性值为true,这个div元素就会显示出来,否则就会被隐藏起来。

二、v-if和v-show的差异点

虽然v-if和v-show都可以实现元素的条件渲染,但是它们在实现方式上有所区别,主要表现在以下几个方面:

  1. 渲染开销

v-if指令是在每次渲染时都会重新判断条件表达式的值,并且根据该表达式的值来添加或移除元素。因此,当条件表达式的值较为复杂或者元素较多时,v-if的渲染开销会比较大。

v-show指令只是通过动态改变元素的display属性来隐藏或显示元素,不需要重新创建或移除元素,因此渲染开销比较小。但是,在元素的初始渲染时,v-show指令需要先判断条件表达式的值,并根据该值来设置元素的display属性,因此渲染速度可能会比v-if慢一些。

  1. 初始化渲染开销

v-if指令在条件表达式初始为false的情况下,不会进行渲染。只有当条件表达式的值变为true时,才会开始进行渲染。因此,v-if的初始化渲染开销会比v-show小一些。

v-show指令在初始渲染时,会根据条件表达式的值来动态设置元素的display属性,从而决定元素是否显示。因此,v-show的初始化渲染开销会比v-if大一些。

  1. 渲染性能

v-if指令在条件表达式的值变化时,会重新进行判断,并重新创建或移除对应的元素。在只有少量元素需要动态渲染时,v-if的性能会比v-show略好一些。

v-show指令只是通过动态改变元素的display属性来控制元素的显示和隐藏,不需要重新创建或移除元素。因此,在需要频繁切换元素显示和隐藏的情况下,v-show的性能会比v-if好一些。

三、v-if和v-show使用场景的选择

基于上述不同点,我们可以根据实际需求来选择v-if和v-show。

当需要频繁切换元素的显示和隐藏时,可以选择使用v-show指令。例如:用于显示和隐藏某些操作面板或对话框、切换菜单等。

PPT.AI
PPT.AI

AI PPT制作工具

下载

当需要根据复杂逻辑判断是否需要渲染某些元素,或者需要动态创建或移除元素时,可以选用v-if指令。例如:根据用户的登录状态来渲染页面中的某些元素、根据用户权限来渲染页面中的某些操作按钮等。

四、实例分析

下面我们来基于一个实例来演示v-if和v-show的使用。

假设我们需要在页面上展示一份商品列表。列表中分别包含商品的名称、价格、库存及购买按钮等信息。同时,该列表还需要提供一个筛选功能,使用户可以根据不同条件来查看不同的商品信息。具体实现如下:

  1. 定义商品列表数据

首先我们需要定义一个包含商品信息的数组,这里我们暂时假定数组中已经包含了10个商品的信息。该数组的格式如下:

goodsList: [
  {
    name: "商品A",
    price: 100,
    stock: 50
  },
  {
    name: "商品B",
    price: 200,
    stock: 80
  },
  ...
]
  1. 定义筛选条件和筛选结果数据

为了实现筛选功能,我们需要定义一个表单,该表单中包含了用于筛选的条件输入框。通过这些输入框,用户可以输入不同的筛选条件来查看不同的商品信息。

同时,我们还需要定义一个变量来存储筛选后的结果,从而将不符合筛选条件的商品过滤掉。 筛选条件和筛选结果的定义如下:

filterForm: {
  name: "",
  minPrice: "",
  maxPrice: ""
},
filteredGoodsList: []
  1. 实现筛选逻辑

为了实现筛选功能,我们需要在Vue实例中定义一个方法,该方法会在每次需要筛选时被调用。该方法会根据用户输入的筛选条件,从商品列表中筛选出符合条件的商品,并将结果存储到filteredGoodsList中。

具体实现代码如下:

methods: {
  filterGoodsList() {
    let filterName = this.filterForm.name.toLowerCase()
    let filterMinPrice = this.filterForm.minPrice ? parseInt(this.filterForm.minPrice) : Number.MIN_SAFE_INTEGER
    let filterMaxPrice = this.filterForm.maxPrice ? parseInt(this.filterForm.maxPrice) : Number.MAX_SAFE_INTEGER
    this.filteredGoodsList = this.goodsList.filter((item) => {
      let itemName = item.name.toLowerCase()
      return itemName.indexOf(filterName) !== -1 && item.price >= filterMinPrice && item.price <= filterMaxPrice
    })
  }
}

在这个方法中,我们首先将用户输入的筛选条件分别提取出来,并将maxPrice和minPrice转换为数字类型。然后,我们使用JavaScript数组的filter方法,从商品列表中筛选出符合条件的商品。可以看到,我们使用了itemName.indexOf(filterName) !== -1这种方式,即通过JavaScript中字符串的indexOf方法来检查itemName是否包含了filterName这个子串。如果包含,则返回true,表示该商品符合筛选条件;否则返回false,表示该商品不符合筛选条件。最后,我们将筛选结果存储到filteredGoodsList中。

  1. 实现列表渲染

我们可以通过v-for指令来遍历filteredGoodsList数组,并将每个数组元素渲染成一个商品信息块。具体实现代码如下:

<div v-for="(item, index) in filteredGoodsList" :key="index" class="goods-item">
  <div class="goods-name">{{ item.name }}</div>
  <div class="goods-price">{{ item.price }}</div>
  <div class="goods-stock">{{ item.stock }}</div>
  <div class="goods-buy-btn" v-show="item.stock > 0">购买</div>
  <div class="goods-sold-out" v-if="item.stock == 0">已售罄</div>
</div>

在这个代码中,我们将v-for指令绑定到filteredGoodsList数组上,这样就可以遍历这个数组中的所有元素。我们使用: key="index"来为每个元素设置一个唯一的key值,以便Vue能够高效地对列表进行更新。

在每个商品信息块中,我们使用v-show和v-if指令来根据不同的商品库存信息来动态展示不同的元素。如果该商品库存大于0,则会显示购买按钮;否则,会显示“已售罄”的文字提示。

  1. 实现筛选表单和筛选按钮

最后,我们需要在页面上添加一个筛选表单,让用户可以输入不同的筛选条件来观察不同的商品信息。表单的代码如下:

<div class="filter-form">
  <label for="filter-name">商品名称:</label>
  <input type="text" id="filter-name" v-model="filterForm.name">
  <label for="filter-min-price">价格区间:</label>
  <input type="text" id="filter-min-price" placeholder="最小价格" v-model="filterForm.minPrice">
  -
  <input type="text" id="filter-max-price" placeholder="最大价格" v-model="filterForm.maxPrice">
  <button @click="filterGoodsList">筛选</button>
</div>

在这个代码中,我们使用了v-model指令将表单元素和Vue实例中的filterForm对象绑定在一起,从而实现了双向数据绑定。我们还添加了一个筛选按钮,在用户点击按钮时会触发filterGoodsList方法,从而重新进行商品列表的筛选和渲染。

六、总结

通过以上分析和实例演示,我们了解了Vue文档中的条件渲染函数的基本知识和使用方法,以及v-if和v-show指令在渲染开销、初始化渲染开销和渲染性能等方面的不同表现。最后,我们还运用条件渲染函数的知识,实现了一个商品列表及其筛选功能的实例。相信这些内容能够对您学习和使用Vue框架提供一些帮助。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

46

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

178

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

51

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

532

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 9.5万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号