在字符串模板中,如 Handlebars,咱们得像这样写一个条件块:缓存
<!-- Handlebars 模板 --> {{#if ok}} <h1>Yes</h1> {{/if}}
在 Vue.js,咱们使用 v-if
指令实现一样的功能:dom
<h1 v-if="ok">Yes</h1>
也能够用 v-else
添加一个 “else” 块:spa
<h1 v-if="ok">Yes</h1> <h1 v-else>No</h1>
由于 v-if
是一个指令,须要将它添加到一个元素上。可是若是咱们想切换多个元素呢?此时咱们能够把一个 <template>
元素当作包装元素,并在上面使用 v-if
,最终的渲染结果不会包含它。code
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
另外一个根据条件展现元素的选项是 v-show
指令。用法大致上同样:blog
<h1 v-show="ok">Hello!</h1>
不一样的是有 v-show
的元素会始终渲染并保持在 DOM 中。v-show
是简单的切换元素的 CSS 属性 display
。事件
注意 v-show
不支持 <template>
语法。字符串
能够用 v-else
指令给 v-if
或 v-show
添加一个 “else 块”:it
<div v-if="Math.random() > 0.5"> Sorry </div> <div v-else> Not sorry </div>
v-else
元素必须当即跟在 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
较好。