条件渲染
v-if
在字符串模板中,例如 Handlebars,我们会这样写一个条件块
|
在 Vue.js 中,我们使用 v-if
指令来实现相同的功能
|
也可以使用 v-else
添加一个“else”块
|
模板 v-if
因为 v-if
是一个指令,所以它必须附加到单个元素上。但如果我们想切换多个元素呢?在这种情况下,我们可以使用 v-if
在一个 <template>
元素上,它充当一个不可见的包装器。最终渲染的结果将不包含 <template>
元素。
|
v-show
另一个有条件地显示元素的选项是 v-show
指令。用法基本相同
|
不同之处在于,带有 v-show
的元素将始终被渲染并保留在 DOM 中;v-show
只是切换元素的 display
CSS 属性。
请注意,v-show
不支持 <template>
语法。
v-else
您可以使用 v-else
指令来指示 v-if
或 v-show
的“else 块”
|
v-else
元素必须紧跟在 v-if
或 v-show
元素之后 - 否则它将不被识别。
组件注意事项
当与组件和 v-show
一起使用时,v-else
由于指令优先级的原因无法正常应用。所以不要这样做
|
用另一个 v-show
替换 v-else
|
它与 v-if
一起使用时按预期工作。
v-if 与 v-show
当 v-if
块被切换时,Vue.js 将不得不执行部分编译/拆卸过程,因为 v-if
内部的模板内容也可以包含数据绑定或子组件。v-if
是“真正的”条件渲染,因为它确保在切换期间,条件块内的事件监听器和子组件被正确销毁和重新创建。
v-if
也是惰性的:如果条件在初始渲染时为假,它将不会执行任何操作 - 部分编译将不会开始,直到条件第一次变为真(并且编译随后被缓存)。
相比之下,v-show
则简单得多 - 元素始终被编译和保留,只是简单的基于 CSS 的切换。
一般来说,v-if
的切换成本更高,而 v-show
的初始渲染成本更高。因此,如果您需要经常切换某个东西,请首选 v-show
;如果条件在运行时不太可能改变,请首选 v-if
。