在使用v-bind和$emit时我们只能实现父子传值,而不能修改接收到的值从而实现双向通信
v-model
vue中内置的一个指令,可以为<input>
、<textarea>
、<select>
元素上数据的双向通信的。当然使用v-moudel也可以实现双向通信
.sync
用于双向通信父子组件,并且可以实现子组件同步更新父组件的数据
示例1
在父组件中使用子组件,使用v-moudel发送value
<child v-model="value"></child>
-----------------------------------------------
在子组件中也需要props来接收
$emit自定义事件来发送修改后的值
props:[
value:{
type:String,
default:'parent_value'
}
]
methods:{
Update() {
this.$emit('input','updatevalue')
}
}
示例2
在父组件中使用子组件,使用.sync发送value
:value.sync="parentvalue" 等于 v-bind:value.sync="parentvalue"
<child :value.sync="Parentvalue"></child>
--------------------------------------------------------------
在子组件中也需要props来接收
$emit(参数1必须是指定的update:接受的value,参数2更改的值)
props:[
value:{
type:String,
default:'parent_value'
}
]
methods:{
Update() {
this.$emit('update:value','update_value')
}
}
相同点:都是语法糖,都可以实现父子组件中的数据的双向通信。
区别点:格式不同:v-model=“num”, :num.sync=“num”
在一个组件内可以使用有且仅有一个v-moudel的使用发送双向绑定,而.sync可以有多个