首页 web前端 Vue.js Vue文档中的条件渲染函数实例分析

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

Jun 21, 2023 am 10:09 AM
vue 条件渲染 函数

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指令。例如:用于显示和隐藏某些操作面板或对话框、切换菜单等。

当需要根据复杂逻辑判断是否需要渲染某些元素,或者需要动态创建或移除元素时,可以选用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框架提供一些帮助。

以上是Vue文档中的条件渲染函数实例分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

vue怎么给按钮添加函数 vue怎么给按钮添加函数 Apr 08, 2025 am 08:51 AM

可以通过以下步骤为 Vue 按钮添加函数:将 HTML 模板中的按钮绑定到一个方法。在 Vue 实例中定义该方法并编写函数逻辑。

vue中怎么用bootstrap vue中怎么用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分为五个步骤:安装 Bootstrap。在 main.js 中导入 Bootstrap。直接在模板中使用 Bootstrap 组件。可选:自定义样式。可选:使用插件。

vue中的watch怎么用 vue中的watch怎么用 Apr 07, 2025 pm 11:36 PM

Vue.js 中的 watch 选项允许开发者监听特定数据的变化。当数据发生变化时,watch 会触发一个回调函数,用于执行更新视图或其他任务。其配置选项包括 immediate,用于指定是否立即执行回调,以及 deep,用于指定是否递归监听对象或数组的更改。

vue.js怎么引用js文件 vue.js怎么引用js文件 Apr 07, 2025 pm 11:27 PM

在 Vue.js 中引用 JS 文件的方法有三种:直接使用 &lt;script&gt; 标签指定路径;利用 mounted() 生命周期钩子动态导入;通过 Vuex 状态管理库进行导入。

vue多页面开发是啥意思 vue多页面开发是啥意思 Apr 07, 2025 pm 11:57 PM

Vue 多页面开发是一种使用 Vue.js 框架构建应用程序的方法,其中应用程序被划分为独立的页面:代码维护性:将应用程序拆分为多个页面可以使代码更易于管理和维护。模块化:每个页面都可以作为独立的模块,便于重用和替换。路由简单:页面之间的导航可以通过简单的路由配置来管理。SEO 优化:每个页面都有自己的 URL,这有助于搜索引擎优化。

怎样查询vue的版本 怎样查询vue的版本 Apr 07, 2025 pm 11:24 PM

可以通过以下方法查询 Vue 版本:使用 Vue Devtools 在浏览器的控制台中查看“Vue”选项卡。使用 npm 运行“npm list -g vue”命令。在 package.json 文件的“dependencies”对象中查找 Vue 项。对于 Vue CLI 项目,运行“vue --version”命令。检查 HTML 文件中引用 Vue 文件的 &lt;script&gt; 标签中的版本信息。

vue返回上一页的方法 vue返回上一页的方法 Apr 07, 2025 pm 11:30 PM

Vue.js 返回上一页有四种方法:$router.go(-1)$router.back()使用 &lt;router-link to=&quot;/&quot;&gt; 组件window.history.back(),方法选择取决于场景。

vue怎么用函数截流 vue怎么用函数截流 Apr 08, 2025 am 06:51 AM

Vue 中的函数截流是一种技术,用于限制函数在指定时间段内被调用的次数,防止性能问题。实现方法为:导入 lodash 库:import { debounce } from 'lodash';使用 debounce 函数创建截流函数:const debouncedFunction = debounce(() =&gt; { / 逻辑 / }, 500);调用截流函数,控制函数在 500 毫秒内最多被调用一次。

See all articles