业务场景1
我们需要做一个数据列表页面,需要让他每8秒进行一次更新
存在问题及如何解决
1、直接写定时任务,赋值给list(列表数据保存的对象),会直接破坏vue对象(其实是内存地址被破坏)
2、我们可以直接打印查看(注意看最后第二个打印有__ob__:Observer)
我们直接 this.list=response会破坏vue对象其实说白了就是破坏了内存的地址(此地址非彼地址)
出现的问题就是数据不能双向绑定(地址都不一样了肯定就不能双向绑定了)
上图,我们通过调试工具发现改变了data里面的值,视图层的值是不会改变的,其实就是破坏了内存地址
如何解决
Object.assign(&result, value) 这样会比较好理解吧,保留内存地址
代码这么写
业务场景2
我们接着上面业务场景1加上:我们需要做一个数据列表页面,需要让他每8秒进行一次更新(还带条件搜索)
存在问题及如何解决
在未点击搜索时,填写相关条件是会缓存到条件对象里面的,当没有点击搜索,而每8秒的定时任务就把条件带过去了,这样造成带回来的数据和当前列表数据完全不一样,当然也就会渲染出错
解决思路:我们可以将条件拷贝下来,每8秒请求使用的条件就是拷贝的条件,而拷贝的条件是让他点搜索再更新。
拷贝就存在有深拷贝与浅拷贝之分
说明:浅拷贝
this.CachelistQuery= this.listQuery 这样 this.listQuery去改变 其实this.CachelistQuery也会改变(共享同一个内存地址所到账) 所以不能用浅拷贝来拷贝条件,因为我们改条件其实拷贝也会变(我们目的是点搜索才会改变)
深拷贝(点击搜索执行)
定时任务