vue 如何取消双向绑定

vue中的双向绑定,在单页面中使用起来非常便利,表单数据和对象保持数据一致,但是在某些应用场景下,比如弹窗,我们需要取消双向绑定功能,否则会出现,当我们修改弹窗数据的时候,父页面的数据同步修改的现象,本文主要介绍如何取消双向绑定。

通过 prop 传递数据

	<ChildDialog
      ref="childDialog"
      :dialog-conditions-visible="dialogVisible"
      :groups="formatGroups(form.groupList)"
    />
    ...
    formatGroups(groupList) {
      if (groupList !== undefined && groupList !== null) {
        // console.log('formatGroups', JSON.parse(JSON.stringify(groupList)))
        // 为什么不使用 [...groupList] ,深拷贝与浅拷贝
        // https://www.cnblogs.com/renbo/p/9563050.html
        return JSON.parse(JSON.stringify(groupList))
      } else {
        return []
      }
    }

如果使用 :groups="form.groupList",那么在子组件中修改 groupList 的值时,会同时修改父页面中的数据。弹窗单击取消后,数据无法恢复。

  • 传递对象
    obj = {...obj}
  • 传递数组
    arr = [...arr]
  • 返回数据
    对象 this.$set(this.form, name, value)
    数组 this.$set(this.list, index, obj)

采用上面的方法,一般情况下是可以实现的,但是遇到多级对象时,依然会被双向绑定,此时,需要用到对象深拷贝,详见:js对象的深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值