天天看點

vue條件渲染

v-if

在字元串模闆中,如 Handlebars ,我們得像這樣寫一個條件塊:

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

在 Vue.js ,我們使用

v-if

指令實作同樣的功能:

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

也可以用

v-else

添加一個 “else” 塊:

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

<template>中的v-if條件組

因為

v-if

是一個指令,需要将它添加到一個元素上。但是如果我們想切換多個元素呢?此時我們可以把一個

<template>

元素當做包裝元素,并在上面使用

v-if

,最終的渲染結果不會包含它。

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

v-else

可以用

v-else

指令給

v-if

<div v-if="Math.random() > 0.5">
  Sorry
</div>
<div v-else>
  Not sorry
</div>      

v-else

元素必須緊跟在

v-if

元素或者

v-else-if

的後面——否則它不能被識别。

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-else

相似,,

v-else-if

必須跟在

v-if

或者

v-else-if

之後。

使用key控制元素的可重用

Vue 嘗試盡可能高效的渲染元素,通常會複用已有元素而不是從頭開始渲染。這麼做除了使 Vue 更快之外還可以得到一些好處。如下例,當允許使用者在不同的登入方式之間切換:

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address">
</template>      

在代碼中切換

loginType

不會删除使用者已經輸入的内容,兩個模版由于使用了相同的元素,

<input>

會被複用,僅僅是替換了他們的

placeholder

自己動手試一試,輸入一些文本,然後點選 「Toggle login type」 進行切換

<div id="no-key-example" class="demo">
  <div>
    <template v-if="loginType === 'username'">
      <label>Username</label>
      <input placeholder="Enter your username">
    </template>
    <template v-else="">
      <label>Email</label>
      <input placeholder="Enter your email address">
    </template>
  </div>
  <button @click="toggleLoginType">Toggle login type</button>
</div>
<script>
new Vue({
  el: '#no-key-example',
  data: {
    loginType: 'username'
  },
  methods: {
    toggleLoginType: function () {
      return this.loginType = this.loginType === 'username' ? 'email' : 'username'
    }
  }
})
</script>      

注意,

<label>

元素仍然會被複用,因為沒有被添加了

key

屬性。

v-show

另一個根據條件展示元素的選項是

v-show

指令。用法大體上一樣:

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

不同的是有

v-show

的元素會始終渲染并保持在 DOM 中。

v-show

是簡單的切換元素的 CSS 屬性

display

注意

v-show

不支援

<template>

文法。

v-if vs v-show

v-if

是真實的條件渲染,因為它會確定條件塊在切換當中适當地銷毀與重建條件塊内的事件監聽器和子元件。

v-if

也是惰性的:如果在初始渲染時條件為假,則什麼也不做——在條件第一次變為真時才開始局部編譯(編譯會被緩存起來)。

相比之下,

v-show

簡單得多——元素始終被編譯并保留,隻是簡單地基于 CSS 切換。

一般來說,

v-if

有更高的切換消耗而

v-show

有更高的初始渲染消耗。是以,如果需要頻繁切換使用

v-show

較好,如果在運作時條件不大可能改變則使用

v-if

較好。

原文:http://vuejs.org/guide/conditional.html