条件渲染
v-if
指令v-if用于条件性地渲染一个块。只有当指令的表达式返回一个真值时,该块才会被渲染。
template
<h1 v-if="awesome">Vue is awesome!</h1>v-else
您可以使用v-else指令来指示v-if的“else块”
template
<button @click="awesome = !awesome">Toggle</button>
<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>Vue很棒!
v-else元素必须立即跟在v-if或v-else-if元素之后——否则它将不会被识别。
v-else-if
正如其名所示,v-else-if充当了v-if的“else if块”。它也可以多次链式使用
template
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>与v-else类似,v-else-if元素也必须立即跟在v-if或v-else-if元素之后。
v-if在
因为v-if是一个指令,它必须附加到一个单一元素上。但如果我们想切换多个元素呢?在这种情况下,我们可以在元素上使用v-if,它充当一个不可见的包装器。最终的渲染结果将不包括元素。
template
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>v-else和v-else-if也可以用于。
v-show
另一种条件性地显示元素的选项是v-show指令。其用法在很大程度上是相同的
template
<h1 v-show="ok">Hello!</h1>不同之处在于,具有v-show的元素总是会渲染并保留在DOM中;v-show仅切换元素的display CSS属性。
v-show不支持<template>元素,也不与v-else一起使用。
v-if与v-show
v-if是“真实”的条件渲染,因为它确保在切换期间,条件块内的监听器和子组件被正确销毁和重新创建。
v-if也是懒加载的:如果初始渲染时条件为假,它将不执行任何操作——条件块不会渲染,直到条件第一次变为真。
相比之下,v-show要简单得多——元素总是渲染,不管初始条件如何,通过CSS切换。
一般来说,v-if 具有更高的切换成本,而 v-show 具有更高的初始渲染成本。因此,如果您需要经常切换某个元素,建议使用 v-show;如果条件在运行时不太可能改变,则建议使用 v-if。
v-if 与 v-for
注意
由于存在隐含优先级,不建议在同一元素上同时使用 v-if 和 v-for。有关详细信息,请参阅 风格指南。
当同一元素上同时使用 v-if 和 v-for 时,v-if 将首先被评估。有关详细信息,请参阅 列表渲染指南。