v-ifdom
v-if
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。spa
<h1 v-if="awesome">Vue is awesome!</h1>
也能够用 v-else
添加一个“else 块”:code
<h1 v-if="awesome">Vue is awesome!</h1> <h1 v-else>Oh no 😢</h1>
#在<template>元素上使用v-if条件渲染分组blog
由于 v-if
是一个指令,因此必须将它添加到一个元素上。可是若是想切换多个元素呢?此时能够把一个 <template>
元素当作不可见的包裹元素,并在上面使用 v-if
。最终的渲染结果将不包含 <template>
元素。事件
<template v-if="ok"> <h1>Title</h1> <p>Paragraph 1</p> <p>Paragraph 2</p> </template>
v-elseinput
你可使用 v-else
指令来表示 v-if
的“else 块”:it
<div v-if="Math.random() > 0.5"> Now you see me </div> <div v-else> Now you don't </div>
v-else
元素必须紧跟在带 v-if
或者 v-else-if
的元素的后面,不然它将不会被识别。模板
v-else-ifclass
2.1.0 新增email
v-else-if
,顾名思义,充当 v-if
的“else-if 块”,能够连续使用:
<div v-if="type === 'A'"> A </div> <div v-else-if="type === 'B'"> B </div> <div v-else-if="type === 'C'"> C </div> <div v-else> Not A/B/C </div>
相似于 v-else
,v-else-if
也必须紧跟在带 v-if
或者 v-else-if
的元素以后。
#用key管理可复用的元素
Vue 会尽量高效地渲染元素,一般会复用已有元素而不是从头开始渲染。这么作除了使 Vue 变得很是快以外,还有其它一些好处。例如,若是你容许用户在不一样的登陆方式之间切换:
<template v-if="loginType === 'username'"> <label>Username</label> <input placeholder="Enter your username"> </template> <template v-else> <label>Email</label> <input placeholder="Enter your email address"> </template>
那么在上面的代码中切换 loginType
将不会清除用户已经输入的内容。由于两个模板使用了相同的元素,<input>
不会被替换掉——仅仅是替换了它的 placeholder
。
这样也不老是符合实际需求,因此 Vue 为你提供了一种方式来表达“这两个元素是彻底独立的,不要复用它们”。只需添加一个具备惟一值的 key
属性便可:
<template v-if="loginType === 'username'"> <label>Username</label> <input placeholder="Enter your username" key="username-input"> </template> <template v-else> <label>Email</label> <input placeholder="Enter your email address" key="email-input"> </template>
注意,<label>
元素仍然会被高效地复用,由于它们没有添加 key
属性。
此处关于复用我的见解: 标签会被重复的使用,当遇到改变时,仅仅改变的是标签内的内容;当使用key值管理时,标签再也不重复的被使用,当须要替换时,标签以及标签内的内容都会被替换
所以用key值来标记不能被重复利用的标签
v-show
另外一个用于根据条件展现元素的选项是 v-show
指令。用法大体同样:
<h1 v-show="ok">Hello!</h1>
不一样的是带有 v-show
的元素始终会被渲染并保留在 DOM 中。v-show
只是简单地切换元素的 CSS 属性 display
。
注意,v-show
不支持 <template>
元素,也不支持 v-else
。
v-if与v-show比比较
v-if
是“真正”的条件渲染,由于它会确保在切换过程当中条件块内的事件监听器和子组件适当地被销毁和重建。
v-if
也是惰性的:若是在初始渲染时条件为假,则什么也不作——直到条件第一次变为真时,才会开始渲染条件块。
相比之下,v-show
就简单得多——无论初始条件是什么,元素老是会被渲染,而且只是简单地基于 CSS 进行切换。
通常来讲,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。所以,若是须要很是频繁地切换,则使用 v-show
较好;若是在运行时条件不多改变,则使用 v-if
较好。
不推荐同时使用 v-if
和 v-for
。
当 v-if
与 v-for
一块儿使用时,v-for
具备比 v-if
更高的优先级。