vue中三种显示和隐藏以及v-if和v-show的区别

本文探讨了Vue框架中用于显示和隐藏内容的三种方法,并重点关注了v-if和v-show的区别。v-if进行真正的条件渲染,确保在条件变化时正确管理事件监听器和子组件的生命周期。它在条件为假时惰性渲染,而v-show则始终渲染元素,仅通过CSS切换显示。根据条件切换的频繁程度,选择v-if(适合不经常变化的情况)或v-show(适合频繁切换的情况)。

                                                                      Vue中的三种显示和隐藏案例:

                                                                       

                                               v-if和v-show的区别:

                                    &nb

Vue 2 中,`v-if` `v-show` 都用于条件性地渲染 DOM 元素,但它们的实现方式使用场景有显著区别。下面详细解释两者的差异,并提供代码示例。 --- ### ✅ 区别总结: | 特性 | `v-if` | `v-show` | |------------------|--------------------------------------|-------------------------------------| | 渲染行为 | **惰性渲染**:条件为真时才创建元素 | **始终渲染**:元素始终存在于 DOM 中 | | DOM 存在性 | 条件为假时,元素从 DOM 中**移除** | 条件为假时,元素通过 `display: none` 隐藏 | | 初始渲染开销 | 较高(可能需要重新创建) | 低(只是切换样式) | | 频繁切换性能 | 差(频繁销毁/重建) | 好(仅 CSS 切换) | | 是否支持 `<template>` | 支持 | 不支持 | | 是否响应式更新 | 是 | 是 | --- ### 🧪 示例代码 ```html <template> <div> <!-- 使用 v-if --> <div v-if="showWithIf"> 这个元素使用 v-if 控制,false 时不会在 DOM 中存在 </div> <!-- 使用 v-show --> <div v-show="showWithShow"> 这个元素使用 v-show 控制,false 时 display: none </div> <!-- 按钮控制显示 --> <button @click="toggle">切换显示</button> </div> </template> <script> export default { data() { return { showWithIf: false, showWithShow: false }; }, methods: { toggle() { this.showWithIf = !this.showWithIf; this.showWithShow = !this.showWithShow; } } }; </script> <style> /* 可以观察到 v-show 的元素一直存在,只是样式变化 */ div[style*="display: none"] { color: gray; } </style> ``` --- ### 🔍 解释说明: - `v-if` 是“真正”的条件渲染: - 当 `showWithIf` 为 `false` 时,该 `<div>` **完全不会被渲染到 DOM 中**。 - 第一次变为 `true` 时,Vue 才会创建并挂载这个元素。 - 适合:**不常切换**的场景,如权限控制、初始加载判断等。 - `v-show` 是“伪隐藏”: - 元素**始终被渲染**,只是通过 `style="display: none"` 来控制可见性。 - 切换非常快,因为没有组件生命周期的开销。 - 适合:**频繁切换**的场景,如折叠面板、开关动画等。 > ⚠️ 注意:`v-show` 不能用在 `<template>` 上,而 `v-if` 可以。 --- ### 💡 相关建议 - 如果你想减少初始渲染负担,用 `v-if`。 - 如果你要频繁切换显示状态,用 `v-show`。 - `v-if` 可与 `v-else` 或 `v-else-if` 搭配使用,`v-show` 不行。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值