Vue架構【基礎篇-第07章】:條件渲染

條件渲染dom

1、v-ifspa

在字符串模板中,好比 Handlebars,咱們得像這樣寫一個條件塊:code

<!-- Handlebars 模板 -->
{{#if ok}}
  <h1>Yes</h1>
{{/if}}

在 Vue 中,咱們使用 v-if 指令實現一樣的功能:blog

<h1 v-if="ok">Yes</h1>

也能夠用 v-else 添加一個「else 塊」:事件

<h1 v-if="ok">Yes</h1>
<h1 v-else>No</h1>

1. 在 <template> 元素上使用 v-if 條件渲染分組字符串

由於 v-if 是一個指令,因此必須將它添加到一個元素上。可是若是想切換多個元素呢?此時能夠把一個 <template> 元素當作不可見的包裹元素,並在上面使用 v-if。最終的渲染結果將不包含 <template> 元素。get

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

2. v-elseit

你可使用 v-else 指令來表示 v-if 的「else 塊」:模板

<div v-if="Math.random() > 0.5">
  Now you see me
</div>
<div v-else>
  Now you don't
</div>

v-else 元素必須緊跟在帶 v-if 或者 v-else-if 的元素的後面,不然它將不會被識別。class

3. v-else-if

v-else-if,顧名思義,充當 v-if 的「else-if 塊」,能夠連續使用:

<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-elsev-else-if 也必須緊跟在帶 v-if 或者 v-else-if的元素以後。

2、v-show

另外一個用於根據條件展現元素的選項是 v-show 指令。用法大體同樣:

<h1 v-show="ok">Hello!</h1>

不一樣的是帶有 v-show 的元素始終會被渲染並保留在 DOM 中。v-show只是簡單地切換元素的 CSS 屬性 display

注意,v-show 不支持 <template> 元素,也不支持 v-else

3、v-if  vs  v-show

v-if 是「真正」的條件渲染,由於它會確保在切換過程當中條件塊內的事件監聽器和子組件適當地被銷燬和重建。

v-if 也是惰性的:若是在初始渲染時條件爲假,則什麼也不作——直到條件第一次變爲真時,纔會開始渲染條件塊。

相比之下,v-show 就簡單得多——無論初始條件是什麼,元素老是會被渲染,而且只是簡單地基於 CSS 進行切換。

通常來講,v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。所以,若是須要很是頻繁地切換,則使用 v-show 較好;若是在運行時條件不多改變,則使用 v-if 較好。

相關文章
相關標籤/搜索