条件渲染
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
将首先被评估。有关详细信息,请参阅 列表渲染指南。