前言:本人是个前端菜鸟,想通过写博客的方式来做笔记,记录自己在工作和学习中遇到的问题和答案
在开发公司的管理后台时(使用的是vue2+elementUI),编辑某个表格中的数据发现编辑页面的数据修改,表格中的数据也会修改,就算不请求后台,表格中的数据也会改变,只有刷新页面才能解决问题,这是一个比较严重的bug,所以经过我仔(疯)细(狂)思(百)考(度),终于找到了原因:
现象图文:
当我点击编辑时,是将后台获取到的某条数据通过插槽传入到另一个对象中,然后对该对象进行增删查改,思路大致没错,可是当我点击编辑并且修改后,发现:
此时我只是修改了表单内的数据,并没有提交,但是表格中的数据改变了
我把编辑窗口关闭,表格中的数据还是没有改变:
刷新窗口后:
数据又重新被赋值为后台返回的数据,说明在我点击编辑赋值的操作中是浅拷贝
查看代码和查阅资料后发现,scope赋值指向的是地址,也就是浅拷贝的操作,所以就算赋值后是修改表单中的对象,表格中的数据也会改变
(a为表单对象)
所以应该用利用 JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象,不过此方法有局限性,它只适用于一般数据的拷贝(对象、数组)
修改后:
解决了该问题。