Vue解决父子组件传值,子组件改变值后父组件的值也改变的问题
描述: vue开发过程中,父组件通过props传值给子组件,子组件在页面展示父组件的值,在操作子组件值以后,即使不点击确定按钮,父组件中的值也发生了变化,但是需求是操作子组件数据以后,必须点击’确定’按钮以后才能修改父组件的值,否则父组件和子组件的值都不可以变化。思路: 为了解决这一问题,当父组件传值给子组件以后,通过JSON.parse(JSON.stringify(data ))将父组件的数据
·
描述: vue开发过程中,父组件通过props传值给子组件,子组件在页面展示父组件的值,在操作子组件值以后,即使不点击确定按钮,父组件中的值也发生了变化,但是需求是操作子组件数据以后,必须点击’确定’按钮以后才能修改父组件的值,否则父组件和子组件的值都不可以变化。
思路: 为了解决这一问题,当父组件传值给子组件以后,通过JSON.parse(JSON.stringify(data ))
将父组件的数据进行拷贝,然后赋值给子组件中字段
,子组件操作只是改变的子组件的值
,而不会改变父组件的值
,当点击‘’确定‘’按钮时,通过$emit调用父组件中的函数,将修改后的子组件值
给了父组件,修改父组件中的值,当再次进入子组件的时候,会重新把修改后的父组件值
拷贝给子组件
进行展示,这样可以解决上述问题啦。
在子组件中拷贝父组件的值:
showTip () {
this.popData.popShow = true
this.chooseFlag = JSON.parse(JSON.stringify(this.hostId))
this.hostInfo = JSON.parse(JSON.stringify(this.hostOne))
}
在子组件中调用父组件方法:
listenBtnFunc (type) {
// type为0表示将确定,将hostInfo传递给父组件
if (type === 0) {
this.$emit('getHost', this.hostInfo, this.chooseFlag)
} else {
this.chooseFlag = this.hostId
this.hostInfo = this.hostOne
}
父组件:
<choose-host
ref="chooseHost"
:host-id="hostId"
:host-one="hostInfo"
@getHost="getHost(arguments)"
/>
getHost (args) {
this.hostInfo = args[0]
this.hostId = args[1]
},
更多推荐
已为社区贡献3条内容
所有评论(0)