本文参考了vuejs的官方文档,结合自己的理解整理而成的读书笔记!
在 元素上使用 v-if 条件渲染分组
当一个v-if指令控制一组html标签显示与隐藏时,可以借助不可见的包裹元素来作为这一组html标签的父元素,然后将v-if指令嵌入
<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>
v-else
v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别
用 v-else 指令来表示 v-if 的“else 块”
<div v-if="Math.random() > 0.5">
Now you see me
</div>
<div v-else>
Now you don't
</div>
// 对于这种简单的需求,我觉得还不如使用三元运算符来做插值表达式
v-else-if
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>
// 对于这种充满逻辑判断的Dom机构,我觉得最好还是使用函数或者计算属性来做,尽量将Dom中的计算逻辑分离到脚本中,保持template的简易性和整洁性
// 这样做同时也增加了代码的可读性和可维护性
用 key 管理可复用的元素
Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染
<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>
// 每次切换时,输入框都将被重新渲染,如果没有key值,切换过后输入框的值不会被清除,仅仅是替换了它的 placeholder
v-show
- 带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS 属性 display
- v-show 不支持 元素,也不支持 v-else
v-if v-show
- v-if会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建
- v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块
- v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换
- v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销(如果v-if和v-show的初始值都时true,那么他们的初始渲染开销不应该是一样的吗,感觉这句话的解释欠妥)
- 如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好