Vue 的指令你知道多少?
更新元素的 textContent(不会解析h5标签)。
示例:
<span v-text="msg">span>
<span>{{msg}}span>
更新元素的 innerHTML。v-html 内的标签属性将会被解析,但在单文件组件里,scoped 的样式将不会应用,因为那部分 HTML 没有被 Vue 的模板编译器处理。
在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。只在可信内容上使用 v-html,永不用在用户提交的内容上。
示例:
<div v-html="html">div>
<div>
<h3>内容h3>
div>
条件渲染,根据条件显示或隐藏元素(切换元素的 display CSS property)。可配合
在条件变化时该指令触发过渡效果。
示例:
<div v-show="isShow">当isShow表达式为真时我显示div>
条件渲染,根据条件插入或移除元素,可配合
在条件变化时该指令触发过渡效果。
示例:
<div v-if="isShow">当isShow表达式为真时我会被渲染div>
v-else-if 和 v-else 都是用来配合 v-if 做条件渲染所以就放一起讲,他们的关系就和js中的 if、else if、else 差不多。
v-else-if 的前一兄弟元素必须有 v-if 或 v-else-if。
v-else 的前一兄弟元素必须有 v-if 或 v-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>
基于源数据多次渲染元素或模板块。在开发中一般用于遍历数组或对象。
示例:
<div v-for="(item, index) in items">
{{ item }}
div>
<div v-for="(item, key, index) in items">
{{ item.xxx }}
div>
在vue2,当和 v-if 一起使用时,v-for 的优先级比 v-if 更高,所以会造成 v-for 每一项都进行 if 判断,影响性能。
绑定事件监听器。可缩写为 @
,在使用时可以配合修饰符
示例:
<button v-on:click="handleClick">button>
<button @[event]="handleClick">button>
属性绑定 或 父组件 props传值(动态地绑定一个或多个 attribute,或一个组件 prop 到表达式)。可缩写为 :
。
示例:
<img :src="imageSrc">
<button :[key]="value">button>
在表单控件或者组件上创建双向绑定。
v-model可用修饰符:
(1) .lazy
v-model默认在input时同步数据,可通过添加 lazy修饰符,转为在change事件同步
(2) .number
自动将输入值转为数值类型,如果这个值无法被 parseFloat() 解析,则会返回原始的值。
(3) .trim
自动过滤用户输入的首尾空白字符
示例:
<input v-model.lazy="inputValue" />
提供具名插槽或需要接收 prop 的插槽。可缩写为#
。
更多的可以去看 vue 插槽的相关知识。
跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。
示例:
<span v-pre>{{ this will not be compiled }}span>
{ this will not be compiled }}
-->
这个指令保持在元素上直到关联实例结束编译。可用来指定该元素在实例结束编译前的样式。一般和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
示例:
[v-cloak] {
display: none;
}
<div v-cloak>
{{ message }}
div>
该元素将不会显示,直到编译结束。
只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
示例:
<span v-once>This will never change: {{msg}}span>
再首次渲染完成后,修改msg不会更新span内容