描述: 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]
	},
Logo

前往低代码交流专区

更多推荐