问题解决: vue3开发中, 当修改了弹出框数据, 列表数据会一并修改。

问题描述:

        当在弹出框中修改数据时,列表数据会同步修改掉,此时我在弹出框还没点确定。当我点击取消时,列表页面数据已被修改。除非重置页面才会使数据恢复。如下图:

        这样的逻辑是完全不符合实际操作的。vue中很多组件绑定数据使用的v-model,给组件的对象赋值时也是用的form.value = res.data类似方式, 其实只是引用地址的赋值。

问题原因:

        使用了浅拷贝,导致直接将对象的引用地址赋值过去,因此修改时会同步更改原始数据。这是代码中存在的问题所在。

解决方案:

        使用 JSON.parse(JSON.stringify(state.selectTableList[0])) 来进行深拷贝。这样可以确保所有层级的数据都被独立复制,不会影响原始数据。只需要在弹出框绑定的:model="form",因为打开弹框有一个异步查询,然后赋值给form的过程。(我这里的情况是这样)

原始赋值代码:

form.value = state.selectTableList[0]

修改后的赋值代码:

form.value = JSON.parse(JSON.stringify(state.selectTableList[0]))

此时问题已经解决:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3,要实现点击输入框出框的功能,你可以按照以下步骤进行操作: 1. 创建一个自定义组件,用于显示出框的内容。 2. 在父组件,监听输入框的点击事件,当输入框被点击时,调用方法显示出框。 3. 在子组件,使用遮罩层样式实现出框的遮罩效果。 4. 在子组件,使用watch属性监听键盘的出和收起事件,根据键盘状态来控制出框的显示和隐藏。 以下是一个示例代码,展示了如何在Vue3实现点击输入框出框的功能: ```javascript // 子组件:Popup.vue <template> <div class="popup" v-show="showPopup"> <!-- 出框内容 --> </div> <div class="mask" v-show="showPopup" @click="hidePopup"></div> </template> <script> export default { data() { return { showPopup: false, // 出框的显示状态 }; }, methods: { hidePopup() { this.showPopup = false; }, }, watch: { nowHeight() { if (this.defaultHeight !== this.nowHeight) { // 键盘出操作 setTimeout(() => { document.activeElement.scrollIntoView(false); let scrollTop = document.body.scrollTop; window.scrollTo(0, scrollTop + 100); }, 200); } else { // 键盘收起操作 } }, }, }; </script> // 父组件:App.vue <template> <div> <input type="text" @click="showPopup" /> <popup></popup> </div> </template> <script> import Popup from '@/components/Popup.vue'; export default { components: { Popup, }, methods: { showPopup() { this.$refs.popup.showPopup = true; }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值