<template>
<div>
<div>{{str}}</div>
<SyncViews :dataSync.sync="tabDataSync"></SyncViews>
</div>
</template>
<script>
import SyncViews from './cComponent/syncViews'
export default {
components : {SyncViews},
mixins : [],
name : "",
data () {
return {
str: '789,456',
tabDataSync:{
label:'nnn',
value:'sss'
}
}
},
}
</script>
<template>
<div>
<p v-for="key in tabData" :key="key">{{key}}</p>
<button @click="change">111</button>
</div>
</template>
<script>
import {extendClone} from '../../utils'
export default {
components : {},
mixins : [],
name : "syncViews",
data () {
return {
tabData:{},
}
},
props : {
dataSync:Object
},
computed : {},
watch : {
dataSync:{
handler(org){
this.tabData = extendClone(org)
},
deep:true,
immediate:true
}
},
methods : {
change(){
this.tabData["time"] = '111';
this.$emit('update:dataSync', this.tabData)
},
},
}
</script>
实例加载后我们我在控制台工具中看到一内容
以为使用 深度克隆对象 我们在操作子组件中change方法时 父组件中的数据不会被改变, change方法在对象中添加了一个key 一些情况中我必须使用深度克隆来让父组件中的数据保持原状
本文的标题来了, 既然使用了深度克隆对象, 改变子组件时父组件数据不会被改变了, 那么我怎么能让父组件中的对象自动更新子组件中已改变的值呢? vue 官方文档是这么描述的。 我们可以使用 $emit(‘update:data’)
this.$emit('update:dataSync', this.tabData)