Vue3基础——条件渲染与列表渲染
条件渲染
条件渲染用于根据条件结果来选择性的渲染HTML中的元素
v-if
:当条件为true时,渲染元素1
<h1 v-if="awesome">Vue is awesome!</h1>
v-else-if
:与else if
效果相同,必须跟在v-if
或v-else-if
后面v-else
:与else
作用相同,必须跟在v-if
或v-else-if
后面
v-show
v-show
同v-if
一样根据条件显示一个元素,但v-show
依然保留元素的DOM节点,只是改变了CSS的display
属性
与v-if
的优劣
v-if
会根据条件完全渲染组件,包括相关的监听器和子组件等,因此它是惰性的,状态切换开销较大v-show
在首次渲染就会渲染出元素,即使value为false,它只修改了display
属性,因此状态切换开销小
列表渲染
使用v-for
指令遍历一个数组或对象
遍历数组:第二个参数index可选,key属性绑定列表项的标识
1 2 3
<li v-for="(item, index) in items" :key="item.id"> {{ item.message }} </li>
遍历对象:第二和第三个参数可选
1 2 3 4 5 6 7 8 9 10 11 12 13
<!-- const myObject = { title: 'How to do lists in Vue', author: 'Jane Doe', publishedAt: '2016-04-10' } --> <ul> <li v-for="(value, key, index) in myObject"> {{ value }} </li> </ul>
字面量范围
1 2 3
<span v-for="n in 10"> {{ n }} </span>
v-for与v-if配合
v-if
比v-for
的优先级高,因此v-if
中无法使用v-for
的遍历变量,通过使用template标签包装可解决
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!--
这会抛出一个错误,因为属性 todo 此时
没有在该实例上定义
-->
<li v-for="todo in todos" v-if="!todo.isComplete">
{{ todo.name }}
</li>
<!--template标签包装-->
<template v-for="todo in todos">
<li v-if="!todo.isComplete">
{{ todo.name }}
</li>
</template>
数组状态检测
通过以下方法修改数组可以触发更新
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
本文由作者按照 CC BY 4.0 进行授权