Vue v-if v-else詳解

一、v-if 和 v-else的基本使用

Vue中的v-if和v-else是用於條件性渲染的指令,只有當指定條件為 true 時才會渲染對應的DOM元素。下面的代碼演示了v-if和v-else的基本用法:

<template>
  <div v-if="isShow">
    <h3>這是v-if渲染出來的內容</h3>
  </div>
  <div v-else>
    <h3>這是v-else渲染出來的內容</h3>
  </div>
</template>


export default {
  data() {
    return {
      isShow: false,
    };
  },
};
</script>

上面的代碼中,通過isShow的值來判斷是渲染v-if還是v-else指定的內容。當isShow為true時,渲染v-if指定的內容;當isShow為false時,渲染v-else指定的內容。需要注意的是:v-else必須緊跟在v-if後面,否則會報錯。

二、v-if和v-show的區別

雖然v-if和v-show都是用於條件性渲染的指令,但是它們之間存在一些區別。下面是它們之間的區別:

1. 編譯時機

v-if 是“真正的”條件渲染,因為它會確保在切換過程中條件塊內的事件監聽器和子組件適當地被銷毀和重建。v-if是惰性的,如果初始條件為false,則什麼也不做,只有在條件為true時才會進行初次編譯。

而v-show則是“懶惰”的,不管初始條件是什麼,它都會在初始渲染時被編譯。並且,每次略微開銷大一點,因為它需要在切換時切換 CSS 樣式。一般來說,v-if更適合在運行時很少改變條件,不需要頻繁切換的場景;v-show則更適合需要非常頻繁切換的場景。

2. 性能消耗

v-if是惰性的,如果初始條件為false,則什麼也不做,只有在條件為true時才會初次編譯和掛載,這樣可以節約一些初次渲染的性能;

v-show則是一直在頁面上,只是在CSS中進行隱藏,所以在切換過程中不需要像v-if那樣創建和銷毀元素,所以雖然v-show在初始渲染時會和$v-if有一點性能損失,但是在頻繁切換時,v-show的性能更高。

三、v-if和v-for的使用

v-if和v-for是經常一起使用的。下面是一個示例代碼,用來說明如何在v-for循環內部使用v-if:

<template>
  <ul>
    <li v-for="(item, index) in list" :key="index">
      <div v-if="item.checked">{{ item.name }}</div>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      list: [
        { name: 'Vue', checked: true },
        { name: 'React', checked: true },
        { name: 'Angular', checked: false },
      ],
    };
  },
};
</script>

在上面的代碼中,使用了v-for遍歷list數組,然後使用v-if判斷item.checked的值,如果為true,則渲染出item.name。

四、使用v-if和v-else-if和v-else進行多重判斷

有時候,我們需要根據不同的條件渲染不同的內容,這時候就需要使用v-else-if指令了。

<template>
  <div>
    <div v-if="type === 'A'">A類型的內容</div>
    <div v-else-if="type === 'B'">B類型的內容</div>
    <div v-else>其他類型的內容</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      type: 'A',
    };
  },
};
</script>

在上面的代碼中,使用了v-if, v-else-if和v-else指令對type的值進行了多重判斷。當type的值為’A’時,渲染”A類型的內容”;當type的值為’B’時,渲染”B類型的內容”;當type的值為其他內容時,渲染”其他類型的內容”。

五、v-if和v-show的語法糖

在Vue 2.5.0及以上版本中,還提供了一種新寫法來使用v-if和v-show指令,稱為“語法糖”。

1. v-if語法糖:

<template>
  <div v-if="name">Hello {{ name }}!</div>
</template>

可以使用下面這種寫法來代替上面的代碼:

<template>
  <div v-if="name">{{`Hello ${name}!`}}</div>
</template>

使用${}來代替 {{ }},並且使用“來代替””。

2. v-show語法糖:

<template>
  <div v-show="isShow">Hello world!</div>
</template>

可以使用下面這種寫法來代替上面的代碼:

<template>
  <div :style="{ display: isShow ? 'block' : 'none' }">Hello world!</div>
</template>

使用:style來設置元素樣式,當isShow為true時,設置display屬性為block;當isShow為false時,設置display屬性為none。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/280527.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:05
下一篇 2024-12-21 13:05

相關推薦

  • 使用Vue實現前端AES加密並輸出為十六進制的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進制。 一、AES加密介紹 AE…

    編程 2025-04-29
  • Vue TS工程結構用法介紹

    在本篇文章中,我們將從多個方面對Vue TS工程結構進行詳細的闡述,涵蓋文件結構、路由配置、組件間通訊、狀態管理等內容,並給出對應的代碼示例。 一、文件結構 一個好的文件結構可以極…

    編程 2025-04-29
  • Vue3的vue-resource使用教程

    本文將從以下幾個方面詳細闡述Vue3如何使用vue-resource。 一、安裝Vue3和vue-resource 在使用vue-resource前,我們需要先安裝Vue3和vue…

    編程 2025-04-27
  • ThinkPHP6 + Vue.js: 不使用Fetch的數據請求方法

    本文將介紹如何在ThinkPHP6和Vue.js中進行數據請求,同時避免使用Fetch函數。 一、AJAX:XMLHttpRequest的基礎使用 在進行數據請求時,最基礎的方式就…

    編程 2025-04-27
  • Vue模擬按鍵按下

    本文將從以下幾個方面對Vue模擬按鍵按下進行詳細闡述: 一、Vue 模擬按鍵按下的場景 在前端開發中,我們常常需要模擬按鍵按下的場景,比如在表單中填寫內容後,按下“回車鍵”提交表單…

    編程 2025-04-27
  • 開發前端程序,Vue是否足夠?

    Vue是一個輕量級,高效,漸進式的JavaScript框架,用於構建Web界面。開發人員可以使用Vue輕鬆完成前端編程,開發響應式應用程序。然而,當涉及到需要更大的生態系統,或利用…

    編程 2025-04-27
  • Python while嵌套if

    本文將從多個方面對Python while裡面嵌套if做詳細的闡述,幫助你更好地理解如何在Python中使用while嵌套if語句。 一、while循環和if語句的基本概念 在開始…

    編程 2025-04-27
  • Python循環輸出1到100的偶數if語句

    本文將從多個角度闡述Python循環輸出1到100的偶數if語句的方法和技巧。 一、循環輸出1到100的偶數if語句的代碼實現 for i in range(1, 101): if…

    編程 2025-04-27
  • 分析if prefixoverrides="and |or"的用法與實例

    if語句是編程語言中最為基礎和常見的控制流語句,而prefixoverrides是if語句的一個重要屬性。其中,prefixoverrides的常見取值為and和or。那麼,這兩者…

    編程 2025-04-27
  • 如何使用Python編寫if語句

    Python是一種廣泛使用的高級編程語言,由於其語法簡潔、易於學習和強大的功能,已經成為了開發人員的首選之一。if語句是Python編程語言中最基本的流程控制語句之一,用於判斷給定…

    編程 2025-04-27

發表回復

登錄後才能評論