首页 > 数据治理 > 数据治理 > 两种语法糖,搞定Vue组件Prop的双向绑定
v-model
指令以及
.sync
修饰符。<template> <child-component :val="val" /> </template> <script> export default { data() { return { val: 100 } } } </script> 而子组件负责接收val,并且每click一次button,则让val+2: <template> <div> <div>{{val}}</div> <button @click="handleClick">click</button> </div> </template>
value
的 prop 和名为
input
的事件,但是像单选框、复选框等类型的输入控件可能会将
value attribute
用于不同的目的。利用
model
选项可以用来避免这样的冲突。换句话说,你可以将
v-model
的prop以任意名称来接收,不一定要使用
value
, 事件名称也可以是任意的,不一定非要写成
input
。如下例:<template> <child-component v-model="val" /> </template> 而子组件内通过model选项去绑定这个prop: export default { model: { prop: 'anyKey', // 不一定非要是value event: 'anyEventName' // 不一定非要是input }, props: { anyKey: { type: Number } }, methods: { handleClick() { this.$emit('anyEventName', this.anyKey+2) } } }
val
的值将会传入这个名为
anyKey
的 prop。同时当子组件
<child-component>
触发一个
anyEventName
事件并附带一个新的值的时候,父组件
val
的 state 将会被更新。<template> <child-component :val.sync="val" /> </template>
update:myPropName
这样一个事件:export default { props: { val: { type: Number } }, methods: { handleClick() { this.$emit('update:val', this.val+2) } } }
.sync
修饰符写起来更简便一些,双向绑定爽歪歪。不过有一点要注意,像
v-bind.sync=”{ title: doc.title }”
这种绑定字面量对象,修饰符是无法正常工作的。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69984138/viewspace-2722293/,如需转载,请注明出处,否则将追究法律责任。