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

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

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

前言

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

一、v-if:基礎(chǔ)條件渲染的 “開關(guān)”

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

基本用法

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

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

特性:惰性渲染

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

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

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

基本用法

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

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

注意事項(xiàng)

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

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

v-else用于設(shè)置條件判斷的最后默認(rèn)分支,當(dāng)所有前置v-ifv-else-if條件均不滿足時(shí),渲染v-else對(duì)應(yīng)的元素。它必須緊跟在v-ifv-else-if之后,且無需綁定表達(dá)式。

基本用法

<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>操作失敗,請(qǐng)重試</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>

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

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

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

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

2. 模板元素的使用

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

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

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

3. 與key的配合

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

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

五、使用場(chǎng)景與最佳實(shí)踐

1. 權(quán)限控制

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

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

2. 狀態(tài)提示

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

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

3. 復(fù)雜表單邏輯

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

<div v-if="formType === 'login'">
  <input placeholder="用戶名">
  <input placeholder="密碼">
</div>
<div v-else-if="formType === 'register'">
  <input placeholder="手機(jī)號(hào)">
  <input placeholder="驗(yàn)證碼">
</div>
<div v-else>
  <input placeholder="郵箱">
</div>

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

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

    html

    預(yù)覽

    <div v-if="showPremiumContent">會(huì)員專屬內(nèi)容</div>
    

六、與 v-show 的對(duì)比

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

七、總結(jié)

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

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

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

相關(guān)文章

  • Vue 3.0 中 Teleport使用示例詳解

    Vue 3.0 中 Teleport使用示例詳解

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

    Vue computed計(jì)算屬性詳細(xì)講解

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

    element使用自定義icon圖標(biāo)的兩種解決方式

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

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

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

    element-ui+vue-treeselect下拉框的校驗(yàn)過程

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

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

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

    Vue.js的動(dòng)態(tài)組件模板的實(shí)現(xiàn)

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

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

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

    vscode中prettier和eslint換行縮進(jìn)沖突的問題

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

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

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

最新評(píng)論

车险| 务川| 旺苍县| 鹰潭市| 宁陕县| 呼图壁县| 贵州省| 惠水县| 定日县| 吉木萨尔县| 彭阳县| 米林县| 乃东县| 谷城县| 崇仁县| 闽侯县| 忻州市| 昂仁县| 临湘市| 鄂州市| 双辽市| 梁河县| 溧水县| 措勤县| 井冈山市| 兴城市| 德格县| 富阳市| 嵩明县| 缙云县| 德钦县| 东宁县| 仙桃市| 乌兰县| 洪泽县| 济阳县| 石泉县| 富川| 讷河市| 延长县| 包头市|