條件渲染
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 is awesome!
一個 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 元素後面。
<template> 上的 v-if
因為 v-if 是一個指令,他必須依附於某個元素。但如果我們想要切換不止一個元素呢?在這種情況下我們可以在一個 <template> 元素上使用 v-if,這只是一個不可見的包裝器元素,最後渲染的結果並不會包含這個 <template> 元素。
template
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>v-else 和 v-else-if 也可以在 <template> 上使用。
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 vs. v-show
v-if 是“真實的”按條件渲染,因為它確保了在切換時,條件區塊內的事件監聽器和子組件都會被銷毀與重建。
v-if 也是惰性的:如果在初次渲染時條件值為 false,則不會做任何事。條件區塊只有當條件首次變為 true 時才被渲染。
相比之下,v-show 簡單許多,元素無論初始條件如何,始終會被渲染,只有 CSS display 屬性會被切換。
總的來說,v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。因此,如果需要頻繁切換,則使用 v-show 較好;如果在運行時綁定條件很少改變,則 v-if 會更合適。
v-if 和 v-for
警告
同時使用 v-if 和 v-for 是不推薦的,因為這樣二者的優先級不明顯。請查看風格指南獲得更多信息。
當 v-if 和 v-for 同時存在於一個元素上的時候,v-if 會首先被執行。請查看列表渲染指南獲取更多細節。
