一,前言
vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定
.sync 修饰符,只是作为一个编译时的语法糖存在。它会被扩展为一个自动更新父组件属性的 v-on 监听器。
<comp
:foo
.sync
="bar"></comp
>
<comp
:foo
="bar" @update
:foo
="val => bar = val"></comp
>
所以在子组件中,需要更新父组件的数据时,使用
this.$emit('update:XXX',XXX)
二,案例
父组件源码
<template
>
<div
class="app-container">
<Test
:parent
-obj
.sync
="parentObj" />
</div
>
</template
>
<script
>
export default {
components
: {
Test
: () => import('./components/Test')
},
data () {
return {
parentObj
: {
value
: 'init'
}
}
},
watch
: {
parentObj
: {
handler (obj
) {
var val
= obj
.value
debugger
},
deep
: true
}
}
}
</script
>
子组件源码
<template
>
<input v
-model
="childObj.value" type
="text" class="input-cls">
</template
>
<script
>
export default {
props
: {
parentObj
: {
type
: Object
,
default () {
return {}
}
}
},
data () {
return {
childObj
: {
value
: ''
}
}
},
watch
: {
childObj
: {
handler (obj
) {
var val
= obj
.value
debugger
this.$emit('update:parentObj', obj
)
},
deep
: true
},
parentObj
: {
handler (obj
) {
var val
= obj
.value
this.childObj
= obj
debugger
},
immediate
: true,
deep
: true
}
}
}
</script
>
<style lang
="scss" scoped
>
.input
-cls
{
padding
: 4px
8px
;
border
: 1px solid #ddd
;
}
</style
>
转载请注明原文地址:https://tech.qufami.com/read-7872.html