第一阶段:Vue 基础入门(第 7 天)

Vue 条件渲染:v-if、v-else-if、v-else 与 v-show 的区别

一、核心知识点
  1. 条件渲染的概念

    通过数据状态的真假值,控制元素在 DOM 中的显示或隐藏。

  2. v-if、v-else-if、v-else 的用法

    • v-if:根据表达式真假创建或销毁元素。

    • v-else-if :作为 v-if 的连续条件分支。

    • v-else :作为 v-if 或 v-else-if 的默认分支(无需表达式)。

    • 逻辑示例:

      html 复制代码
      <div v-if="score >= 90">优秀</div>
      <div v-else-if="score >= 60">及格</div>
      <div v-else>不及格</div>
  3. v-show 的用法

    通过切换 CSS 的 display: none 控制元素的显隐(元素始终存在于 DOM 中):

    html 复制代码
    <div v-show="isVisible">提示信息</div>
  4. v-if vs v-show 的核心区别

    特性 v-if v-show
    DOM 操作 动态创建/销毁元素 仅切换 display 属性
    初始渲染成本 初始为假时不渲染 无论真假都会渲染
    切换性能 适合不频繁切换的场景 适合频繁切换的场景
    生命周期 触发组件的创建/销毁钩子 不触发生命周期钩子
    <template>支持 支持 不支持

二、案例代码
  1. 多条件分支渲染(v-if/v-else-if/v-else)

    html 复制代码
    <template>
      <div>
        <p v-if="score >= 90">成绩优秀!</p>
        <p v-else-if="score >= 70">良好</p>
        <p v-else-if="score >= 60">及格</p>
        <p v-else>需要努力哦</p>
      </div>
    </template>
  2. 显隐控制(v-show)

    html 复制代码
    <template>
      <div>
        <button @click="toggle">切换提示</button>
        <p v-show="showTip">这是一个重要提示!</p>
      </div>
    </template>
    <script>
    export default {
      data() {
        return { showTip: true };
      },
      methods: {
        toggle() {
          this.showTip = !this.showTip;
        }
      }
    };
    </script>
  3. 通过开发者工具观察 DOM

    • v-if 为假时:元素从 DOM 中完全移除。
    • v-show 为假时 :元素保留但添加 style="display: none;"。

三、总结要点
  1. 选择策略

    • 若元素需要频繁切换显隐 (如弹窗、选项卡),优先使用 v-show 避免重复渲染开销。
    • 若元素无需频繁切换 (如权限控制、静态条件分支),使用 v-if 减少初始 DOM 节点数。
  2. 组合使用
    v-if 系列适合处理互斥逻辑分支 ,而 v-show 适合独立元素的显隐控制。例如:

    html 复制代码
    <div v-if="hasPermission">
      <admin-panel v-show="isPanelVisible"/>
    </div>
  3. 注意事项
    v-else-if 和 v-else 必须紧跟在 v-if 或 v-else-if 元素之后,否则无法正确解析逻辑分支。

相关推荐
子兮曰5 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
paopaokaka_luck8 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787058 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH8 小时前
HTML 的 <video> 元素
前端·html
溪语流沙9 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
逐光者9339 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC9 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo9 小时前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师9 小时前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd012310 小时前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化