Vue条件渲染主要用v-if/v-else-if/v-else实现真正的条件编译,适合开销大或无需保留状态的场景;v-show仅切换display,适合频繁切换;复杂逻辑应提取至computed,模板保持简洁;v-if切换会销毁组件,需保留状态时用v-show或keep-alive。
Vue 中条件渲染主要靠
、
和
,它们根据表达式的真假值动态插入或移除 DOM 元素。相比
(仅切换 CSS 的
),
是真正的条件编译——条件为假时,对应节点不会被渲染到 DOM 中,适合控制开销较大或无需保留状态的分支。
基础用法:单条件与多分支
最常用的是三者配合使用,形成类似 JavaScript 中
的结构:
必须存在,绑定一个返回布尔值的表达式(如
)
和
必须紧跟在
或另一个
后面,否则会失效
每个分支是独立的 DOM 块,互斥渲染;不满足任一分支时,整个区域不渲染
示例:
避免过度嵌套:用计算属性简化判断逻辑
当条件涉及多个变量、复杂运算或重复判断时,直接写在模板里会让代码难读、难维护,也容易出错。推荐把判断逻辑提取到
中:
立即学习
“
前端免费学习笔记(深入)
”;
将多个字段组合(如
+
)封装成一个语义化字段,如
计算属性自动响应依赖变化,且可复用、可测试
模板中只保留清晰的布尔判断,比如
例如:
Vue-router参考手册
Vue-router参考手册下载
下载
模板中直接使用:
作用域与响应性注意事项
会触发局部编译,内部绑定的响应式数据仍有效,但有几点需留意:
切换时,内部组件会被销毁/重建,其生命周期钩子(如
、
)会触发,数据状态不保留
若需保留状态(如表单输入、滚动位置),改用
,或用
缓存组件
不支持在
上单独使用 —— 必须搭配
或
才能用于
标签进行分组渲染
合法的
用法示例:
替代方案:v-show 与 v-cloak 的适用场景
并非所有“条件显示”都该用
:
适合频繁切换的场景(如折叠面板、标签页),它始终渲染 DOM,仅通过
控制可见性,性能开销小
不是条件指令,而是解决初始渲染时插值未就绪的闪烁问题(配合 CSS
),常用于包裹
区块防止闪现
对服务端渲染(SSR)项目,
在服务端即生效,而
无法在服务端隐藏元素,需注意首屏一致性
简单原则:渲染开销大、条件极少变化 → 用
;切换频繁、需保持状态 → 用
。
v-ifv-else-ifv-elsev-showdisplayv-ifif...else if...elsev-ifuser.role === 'admin'v-else-ifv-elsev-ifv-else-if加载中...
请求失败,请重试
{{ data.name }}
暂无数据computeduser.permissionsroute.meta.requiresAuthcanAccessDashboardv-if="canAccessDashboard"computed: {
canEditPost() {
return this.user &&
this.user.role === 'editor' &&
this.post.status !== 'published' &&
!this.isSubmitting
}
}v-ifv-ifmountedbeforeUnmountv-showv-ifv-else-ifv-else
欢迎回来
请登录
v-ifv-showdisplay: nonev-cloak[v-cloak] { display: none }v-ifv-ifv-showv-ifv-show