Vue实践与总结——指令
2020-06-27 本文已影响0人
xymspace
Vue指令
目的:实现动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。
职责:当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
指令分类
Vue会对v-开头的特殊属性进行解析,影响当前dom
类型 | 表达式 |
---|---|
内容输出 | v-once、v-cloak |
循环 | v-for |
逻辑 | v-if、v-else、v-else-if、v-show |
属性绑定 | v-bind(单项绑定)、v-model(双向绑定) |
事件 | v-on |
其它 | v-slot |
-
v-show
控制元素的display属性,会生成 元素dom
适用于状态 频繁 切换的情况
-
v-if
根据条件,创建或销毁元素,销毁时 会删除 元素dom
适用于状态 较少 切换的情况
-
v-else
v-else限制!!:
必须和v-if是同一级,且是相邻的兄弟级
-
v-for
除了在迭代的内容,还可获取到循环下标。
-
v-bind
缩写::
可以绑定(常用举例。还有其它绑定方式):
- 选择器(:id,:class={class1:state1, class2:state2})
- 样式(:style=[style1,style2])
- 引用(:src="imageSrc")
修饰符:
-
.prop
- 作为一个 DOM property 绑定而不是作为 attribute 绑定。(差别在哪里?) -
.camel
- (2.1.0+) 将 kebab-case attribute 名转换为 camelCase。(从 2.1.0 开始支持) -
.sync
(2.3.0+) 语法糖,会扩展成一个更新父组件绑定值的v-on
侦听器。可实现双绑,比v-model更优秀,解决了v-model的缺点
this.$emit('update:title', newTitle)
<text-document v-bind:title.sync="doc.title"></text-document>
单向数据流:当数据发生改变,模板会重新渲染,模板语法v-bind等单项指令,不会在视图发生变化时,更新数据。
-
v-model(默认绑定value属性以及change事件)
使用限制:
- input
- select
- textarea
- components(自定义组件)
- 通过事件响应后,发生改变的属性
修饰符:
缺点:
- 不能同时绑定多个属性
- 数据的修改比较隐蔽
双向数据流:数据变化-->视图渲染,视图变化-->数据改变
-
v-cloak
-
不需要表达式
-
用法:
这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如
[v-cloak] { display: none }
一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
-
-
v-on
-
缩写:
@
-
预期:
Function | Inline Statement | Object
-
参数:
event
-
修饰符:
-
.stop
- 调用event.stopPropagation()
。 -
.prevent
- 调用event.preventDefault()
。 -
.capture
- 添加事件侦听器时使用 capture 模式。 -
.self
- 只当事件是从侦听器绑定的元素本身触发时才触发回调。 -
.{keyCode | keyAlias}
- 只当事件是从特定键触发时才触发回调。 -
.native
- 监听组件根元素的原生事件。 -
.once
- 只触发一次回调。 -
.left
- (2.2.0) 只当点击鼠标左键时触发。 -
.right
- (2.2.0) 只当点击鼠标右键时触发。 -
.middle
- (2.2.0) 只当点击鼠标中键时触发。 -
.passive
- (2.3.0) 以{ passive: true }
模式添加侦听器
-
-