v-ifv-else-if詳解

一、v-ifv-else-if的基本用法

<template>
  <div>
    <p v-if="isShow">這是v-if的內容</p>
    <p v-else-if="isShow2">這是v-else-if的內容</p>
    <p v-else>這是v-else的內容</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      isShow: true,
      isShow2: false
    }
  }
}
</script>

v-ifv-else-if是Vue中條件渲染的常用指令,它們的作用是根據表達式的值的變化來顯示或隱藏DOM元素。

v-ifv-else-if的基本語法是:

<element v-if="condition">...</element>
<element v-else-if="condition2">...</element>
<element v-else>...</element>

其中,如果condition的值為true,則顯示v-if控制的元素,否則不顯示;同理,如果condition2的值為true,則顯示v-else-if控制的元素,否則不顯示;如果前面所有的條件都不滿足,則顯示v-else控制的元素。

二、v-ifv-else-if與v-show的區別

v-ifv-else-if與v-show兩者都能控制元素的顯示與隱藏,但它們的實現方式不同。

首先,v-show的本質是通過CSS的display屬性來控制元素的顯示與隱藏。當顯示條件為true時,給元素添加display屬性為block,否則給元素添加display:none屬性。也就是說,即使元素被隱藏,它的DOM結構還是會被保留,只是簡單的通過CSS的display:none屬性來控制元素的可見性,因此切換複雜度較低,但有可能會影響頁面性能。

相比之下,v-ifv-else-if的工作方式是直接切換DOM元素。當條件為true時,Vue創建管理該元素的DOM,否則銷毀該元素及其子元素。這就造成了v-ifv-else-if切換的複雜度較高,但能夠在切換元素時優化頁面性能。

<template>
  <div>
    <p v-show="isShow">這是v-show的內容</p>
    <p v-if="isShow">這是v-if的內容</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      isShow: true
    }
  }
}
</script>

在上面的例子中,我們通過v-show和v-if來控制相同的元素,它們的區別是:

  • v-show通過display屬性來控制元素的顯示與隱藏,元素的DOM結構一直被保留,但是通過CSS的display:none屬性控制元素可見性,有可能會影響頁面性能。
  • v-if通過切換DOM元素來控制元素的顯示與隱藏,元素的DOM結構不一定被保留,能夠在切換元素時優化頁面性能,但切換的複雜度較高。

三、v-ifv-else-if的使用案例

v-ifv-else-if不僅僅是簡單的條件渲染,還可以根據不同情況來顯示不同的內容。

1.基礎案例

基礎案例:使用v-ifv-else-if判斷不同的年齡段,並顯示不同的內容。

<template>
  <div>
    <div v-if="age < 18">
      <p>您未成年,禁止入內</p>
    </div>
    <div v-else-if="age >= 18 && age < 60">
      <p>您已成年並且未達到退休年齡,可以正常工作</p>
    </div>
    <div v-else>
      <p>您已退休,可以休息一下了</p>
    </div>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      age: 25
    }
  }
}
</script>

2.複雜案例

複雜案例:當鼠標移動到不同的按鈕上時,顯示不同的提示信息。

<template>
  <div>
    <button @mousemove="setTips('這是按鈕1的提示信息')">按鈕1</button>
    <button @mousemove="setTips('這是按鈕2的提示信息')">按鈕2</button>
    <button @mousemove="setTips('這是按鈕3的提示信息')">按鈕3</button>
    <div v-if="tips">
      {{ tips }}
    </div>
  </div>
</template>
 
<script>
export default {
    data(){
        return {
            tips: ""
        }
    },
    methods: {
        setTips(value){
            this.tips = value;
        }
    }
}
</script>

在上面的例子中,我們用了一個data屬性名為tips來控制提示內容的顯示,當鼠標移動到不同按鈕上時,通過調用setTips方法設置tips的值,由v-if來控制提示內容的顯示與隱藏。這種方式在需要動態提示信息的場景中非常常用。

3.高級案例:根據不同的列表狀態展示不同的內容

高級案例:根據不同的列表狀態展示不同的內容,如果列表為空則顯示”No Data”,如果列表正在加載中則顯示”Loading…”,如果列表加載完成,但是沒有數據時則顯示”No Data”。

<template>
  <div>
    <ul v-if="isCompleted">
      <li v-for="item in data" :key="item">{{item}}</li>
    </ul>
    <span v-else-if="isLoading">Loading...</span>
    <span v-else>No Data</span>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      data: [],
      isLoading: true,
      isCompleted: false
    }
  },
  created() {
    setTimeout(() => {
       // 模擬異步請求數據
      if (this.data.length) {
        this.isCompleted = true;
        this.isLoading = false;
      } else {
        this.isLoading = false;
      }
    }, 2000)
  }
}
</script>

在上面的高級案例中,我們用了三個data屬性來控制列表展示的狀態:

  • data:列表中的數據。
  • isLoading:列表是否正在請求數據的狀態標誌。
  • isCompleted:列表請求數據完成後的狀態標誌。

通過v-ifv-else-if來實現列表不同狀態下的展示內容,其中當isLoading為true時,顯示Loading…,當isCompleted為true時,顯示列表內容,否則顯示No Data。這種方式在數據加載過程中需要展現不同狀態下的展示內容時非常實用。

四、總結

v-ifv-else-if是Vue中常用的條件渲染指令,它提供了控制元素顯示與隱藏的功能,同時還能根據不同情況顯示不同的內容。v-ifv-else-if的實現方式是直接切換DOM元素,所以能夠在切換元素時優化頁面性能。但切換的複雜度較高,需要慎重使用。

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

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

相關推薦

  • 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
  • 如何使用Python編寫if語句

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

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

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

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論