最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue條件渲染之v-if、v-else-if、v-else的完整指南

 更新時間:2026年03月02日 09:38:11   作者:局i  
v-if和v-else是Vue.js中的控制指令,用于條件性地渲染一塊內容,這些內容只會在指令表達式返回真值時才會渲染,這篇文章主要介紹了Vue條件渲染之v-if、v-else-if、v-else的完整指南,需要的朋友可以參考下

前言

在 Vue 開發(fā)中,條件渲染是實現(xiàn)動態(tài)視圖的核心能力之一。v-if、v-else-ifv-else指令組合,構成了 Vue 中強大的條件判斷體系,能夠根據(jù)不同狀態(tài)靈活控制 DOM 的渲染邏輯。本文將深入解析這組指令的用法、特性及最佳實踐,幫助你精準掌握條件渲染的精髓。

一、v-if:基礎條件渲染的 “開關”

v-if是 Vue 中最基礎的條件渲染指令,其核心作用是根據(jù)表達式的真假值,決定是否渲染元素及其子元素。當表達式返回true時,元素會被渲染到 DOM 中;返回false時,元素則會被完全銷毀。

基本用法

<div id="app">
  <div v-if="isLogin">
    <h3>歡迎回來,{{ username }}!</h3>
    <button>退出登錄</button>
  </div>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    isLogin: true,
    username: 'Vue開發(fā)者'
  }
});
</script>

在上述示例中,當isLogintrue時,歡迎語和退出按鈕會被渲染;若isLogin變?yōu)?code>false,這部分 DOM 會被直接移除。

特性:惰性渲染

v-if遵循 “惰性渲染” 原則 —— 初始條件為false時,元素不會被渲染,直到條件首次變?yōu)?code>true,才會創(chuàng)建并插入 DOM。這一特性有助于優(yōu)化初始渲染性能,尤其適合無需立即顯示的內容(如權限控制模塊)。

二、v-else-if:多條件分支的 “選擇器”

當需要處理多個條件分支時,v-else-if可作為v-if的補充,實現(xiàn)多條件遞進判斷。它必須緊跟在v-if或另一個v-else-if之后,且表達式需按順序判斷。

基本用法

<div id="app">
  <div v-if="score >= 90">優(yōu)秀</div>
  <div v-else-if="score >= 80">良好</div>
  <div v-else-if="score >= 60">及格</div>
  <div v-else>不及格</div>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    score: 85
  }
});
</script>

上述代碼會根據(jù)score的值,依次判斷并渲染對應的等級。v-else-if的判斷具有排他性,一旦某個條件滿足,后續(xù)分支將不再執(zhí)行。

注意事項

  • v-else-if不能單獨使用,必須與v-if配合;
  • 多個v-else-if需按邏輯順序排列,避免條件覆蓋(如先判斷>=60再判斷>=90會導致邏輯錯誤)。

三、v-else:條件分支的 “兜底方案”

v-else用于設置條件判斷的最后默認分支,當所有前置v-ifv-else-if條件均不滿足時,渲染v-else對應的元素。它必須緊跟在v-ifv-else-if之后,且無需綁定表達式。

基本用法

<div id="app">
  <button @click="toggleStatus">切換狀態(tài)</button>
  <p v-if="status === 'loading'">加載中...</p>
  <p v-else-if="status === 'success'">操作成功!</p>
  <p v-else>操作失敗,請重試</p>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    status: 'loading'
  },
  methods: {
    toggleStatus() {
      const statusList = ['loading', 'success', 'error'];
      const currentIndex = statusList.indexOf(this.status);
      this.status = statusList[(currentIndex + 1) % 3];
    }
  }
});
</script>

點擊按鈕切換status時,視圖會根據(jù)不同狀態(tài)渲染對應提示,v-else作為最終兜底,處理所有未匹配的情況。

四、v-if、v-else-if、v-else 的核心特性

1. DOM 的動態(tài)創(chuàng)建與銷毀

這組指令通過創(chuàng)建 / 銷毀 DOM 元素實現(xiàn)條件渲染,而非簡單的樣式隱藏。例如,當v-if條件從true變?yōu)?code>false時,元素會被從 DOM 樹中移除并銷毀,其內部的組件實例也會被銷毀;條件恢復true時,元素會重新創(chuàng)建并觸發(fā)組件的生命周期鉤子。

2. 模板元素的使用

若需同時控制多個元素的條件渲染,可使用<template>標簽包裹,避免額外 DOM 節(jié)點的生成:

<template v-if="hasPermission">
  <div>模塊A</div>
  <div>模塊B</div>
</template>

<template>僅作為邏輯容器,最終渲染時不會出現(xiàn)在 DOM 中。

3. 與key的配合

當在同一位置切換不同條件的元素時,Vue 可能會復用 DOM 節(jié)點以優(yōu)化性能,這可能導致輸入框等組件的狀態(tài)殘留。通過添加唯一key可強制 Vue 銷毀并重建元素:

<div v-if="isUser">
  <input placeholder="用戶名" key="user-input">
</div>
<div v-else>
  <input placeholder="郵箱" key="email-input">
</div>

五、使用場景與最佳實踐

1. 權限控制

根據(jù)用戶角色渲染不同功能模塊:

<div v-if="role === 'admin'">管理員面板</div>
<div v-else-if="role === 'editor'">內容編輯頁</div>
<div v-else>訪客視圖</div>

2. 狀態(tài)提示

展示接口請求的不同狀態(tài):

<div v-if="loading">加載中...</div>
<div v-else-if="error">請求失敗:{{ errorMsg }}</div>
<div v-else>數(shù)據(jù)加載完成:{{ data }}</div>

3. 復雜表單邏輯

根據(jù)表單類型切換不同輸入項:

<div v-if="formType === 'login'">
  <input placeholder="用戶名">
  <input placeholder="密碼">
</div>
<div v-else-if="formType === 'register'">
  <input placeholder="手機號">
  <input placeholder="驗證碼">
</div>
<div v-else>
  <input placeholder="郵箱">
</div>

4. 性能優(yōu)化建議

  • 避免在頻繁切換的場景中使用:若條件需高頻切換(如 tab 切換),建議使用v-show(通過 CSS 控制顯示 / 隱藏),減少 DOM 操作開銷;
  • 條件表達式簡化:復雜條件可通過計算屬性封裝,提升代碼可讀性:
    computed: {
      showPremiumContent() {
        return this.isVip && this.hasPaid && !this.expired;
      }
    }
    

    html

    預覽

    <div v-if="showPremiumContent">會員專屬內容</div>
    

六、與 v-show 的對比

特性v-if 系列指令v-show
實現(xiàn)方式創(chuàng)建 / 銷毀 DOM 元素修改 CSS 的 display 屬性
初始渲染性能條件為 false 時無渲染開銷無論條件如何都渲染元素
切換性能切換開銷高(DOM 操作)切換開銷低(僅修改樣式)
適用場景低頻切換、復雜條件分支高頻切換、簡單顯示隱藏

七、總結

v-if、v-else-if、v-else構成了 Vue 中靈活的條件渲染體系,通過動態(tài)創(chuàng)建 / 銷毀 DOM 實現(xiàn)視圖的精準控制。掌握它們的特性:

  • v-if是基礎條件判斷,支持惰性渲染;
  • v-else-if處理多分支邏輯,需按順序排列;
  • v-else作為兜底分支,簡化默認情況處理。

到此這篇關于Vue條件渲染之v-if、v-else-if、v-else完整指南的文章就介紹到這了,更多相關Vue條件渲染v-if、v-else-if、v-else內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue 3.0 中 Teleport使用示例詳解

    Vue 3.0 中 Teleport使用示例詳解

    Teleport的主要用途是將某些DOM元素渲染到Vue應用之外的DOM 節(jié)點中,這在處理模態(tài)框、通知、加載提示等需要突破當前組件DOM層級的場景時特別有用,本文給大家介紹Vue 3.0 中 Teleport的相關知識,感興趣的朋友一起看看吧
    2025-05-05
  • Vue computed計算屬性詳細講解

    Vue computed計算屬性詳細講解

    computed是vue的配置選項,它的值是一個對象,其中可定義多個計算屬性,每個計算屬性就是一個函數(shù),下面這篇文章主要給大家介紹了關于vue中計算屬性computed的詳細講解,需要的朋友可以參考下
    2022-10-10
  • element使用自定義icon圖標的兩種解決方式

    element使用自定義icon圖標的兩種解決方式

    因為安裝原型圖設計實現(xiàn)頁面,在element自帶的圖標庫好像沒有,所以按鈕的圖標icon需要自定義,下面這篇文章主要給大家介紹了關于element使用自定義icon圖標的兩種解決方式,需要的朋友可以參考下
    2022-07-07
  • js節(jié)流防抖應用場景,以及在vue中節(jié)流防抖的具體實現(xiàn)操作

    js節(jié)流防抖應用場景,以及在vue中節(jié)流防抖的具體實現(xiàn)操作

    這篇文章主要介紹了js節(jié)流防抖應用場景,以及在vue中節(jié)流防抖的具體實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • element-ui+vue-treeselect下拉框的校驗過程

    element-ui+vue-treeselect下拉框的校驗過程

    這篇文章主要介紹了element-ui+vue-treeselect下拉框的校驗過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue extend的基本用法(實例詳解)

    Vue extend的基本用法(實例詳解)

    這篇文章主要介紹了Vue extend的基本用法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Vue.js的動態(tài)組件模板的實現(xiàn)

    Vue.js的動態(tài)組件模板的實現(xiàn)

    這篇文章主要介紹了Vue.js的動態(tài)組件模板的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 詳解Vue的組件中data選項為什么必須是函數(shù)

    詳解Vue的組件中data選項為什么必須是函數(shù)

    這篇文章主要給大家介紹了關于Vue的組件中data選項為什么必須是函數(shù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Vue具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • vscode中prettier和eslint換行縮進沖突的問題

    vscode中prettier和eslint換行縮進沖突的問題

    這篇文章主要介紹了vscode中prettier和eslint換行縮進沖突的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue.js iview打包上線后字體圖標不顯示解決辦法

    vue.js iview打包上線后字體圖標不顯示解決辦法

    這篇文章主要介紹了vue.js iview打包上線后字體圖標不顯示解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01

最新評論

武安市| 仁寿县| 定远县| 沁源县| 蓬安县| 高州市| 布尔津县| 闻喜县| 鸡泽县| 德昌县| 巴南区| 武汉市| 磴口县| 鹿泉市| 略阳县| 天峨县| 南昌市| 科尔| 西宁市| 方城县| 磐石市| 察雅县| 慈利县| 汤原县| 红桥区| 蓝山县| 陕西省| 平乡县| 益阳市| 禄丰县| 肥东县| 庆城县| 馆陶县| 绍兴市| 镇雄县| 内丘县| 五台县| 虹口区| 灵宝市| 柘城县| 中方县|