Vue.js:v-if條件渲染

最近更新時間 2020-01-11 11:01:19

v-if 指令用於條件性地渲染一塊內容。這塊內容只會在指令的表達式返回 true 值的時候被渲染。

v-if

<div id="app">
  <h1 v-if="awesome">Vue</h1>
</div>

<script>
var app = new Vue({
  el: '#app',
  data: {
    awesome: true
  }
})
</script>
[Vue warn]: Property or method "awesome" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.

如果 data 中沒有定義 awesome 屬性會報錯

v-else

<div id="app">
  <h1 v-if="awesome">Vue!</h1>
  <h1 v-else>Else</h1>
</div>

<!-- JS -->
<script>
var app = new Vue({
  el: '#app',
  data: {
    awesome: false
  }
})
</script>

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

v-else-if

<div id="app">
  <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>
</div>
 
<!-- JS -->
<script>
var app = new Vue({
  el: '#app',
  data: {
    type: 'B'
  }
})
</script>

v-show

另一個用於根據條件展示元素的選項是 v-show 指令。不同的是帶有 v-show 的元素始終會被渲染並保留在 DOM 中。v-show 只是簡單地切換元素的 CSS 屬性 display。

<div id="app">
  <h1 v-show="isShow">Hello!</h1>
</div>
 
<!-- JS -->
<script>
var app = new Vue({
  el: '#app',
  data: {
    isShow: false
  }
})
</script>

一般來説,v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。因此,如果需要非常頻繁地切換,則使用 v-show 較好;如果在運行時條件很少改變,則使用 v-if 較好。

不推薦同時使用 v-ifv-for

rss_feed