v-if 指令
- 用于条件性地渲染一块内容
- 只会在指令的表达式返回
truthy
值的时候被渲染
<h1 v-if="awesome">Vue is awesome!</h1>
<template v-else>
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
在 <template> 元素上使用 v-if 条件渲染分组
- 切换多个元素,可以把一个
<template>
元素当做不可见的包裹元素 - 最终的渲染结果将不包含
<template>
元素
v-else 指令
- 使用
v-else
指令来表示v-if
的“else 块” -
v-else
元素必须紧跟在带v-if
或者v-else-if
后,否则不被识别
v-else-if 指令
- 充当
v-if
的“else-if 块”,可以连续使用
<div v-if=" count < 10 ">
count less then 10
</div>
<div v-else-if="count < 20 ">
count less then 20
</div>
<div v-else>
count more then 20
</div>
用 key 管理可复用的元素
- 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>
- 两个模板使用了相同的元素,
<input>
将不会替换,只替换placeholder
设置唯一性
- 添加一个具有唯一值的
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>
元素仍被复用
v-show 指令
- 带有
v-show
的元素始终会被渲染并保留在 DOM 中 -
v-show
切换元素的display
属性 -
v-show
不支持<template>
元素,也不支持v-else
。
<h1 v-show="ok">Hello!</h1>
v-if vs v-show
-
v-if
- “真正”的条件渲染
- 在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建
- 惰性的——初始渲染时条件为假,不启用,直到第一次为真
- 更高的切换开销,运行时条件很少改变,则使用
v-if
-
v-show
- 不管初始条件,元素总是会被渲染,
- 简单地基于 CSS 进行切换
- 更高的初始渲染开销,频繁地切换,则使用
v-show
v-if 与 v-for 一起使用
不推荐同时使用
v-if
和v-for
v-for
具有比 v-if
更高的优先级