vuejs2 - 如何用另一个“观察者”更新 vue“观察者”的所有属性
问题描述
我有两个 vue 'observer' 数据 a 和 b 具有相同的键值,我需要将 b 的值替换为 a 的值。如果 b 的值包含一个复杂对象,我希望这个复杂对象是 a 的值。深拷贝替换。我有一些想法:this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
,但是 someObject 变得不可观察。你有什么好的方法吗?非常感谢您
https://codepen.io/yakiler/project/editor/DadznN#
var app = new Vue({
el: '#demo',
mounted: function () {
},
methods: {
clickMe(){
let pureData = {...this.copyData.v }; // get a pure data by vue Observer data
let f = v => v && JSON.parse(JSON.stringify(v)) || {};
let needUpdateData = this.originData.v;
let returnValue = Object.assign({}, needUpdateData, f(pureData)); // exec replace value
console.log('pureData',pureData);
console.log('needUpdateData',needUpdateData);
console.log('returnvalue',returnValue);
console.log('originData',this.originData);
}
},
data: function() {
return {
originData:{
v:{a:1},b:2
},
copyData:{
v:{a:0},b:0
}
}
}
})
解决方案
我会坚持使用 Object.assign()。您应该能够毫不费力地管理观察者。最简单的解决方案是在组件的根目录中不包含 someObject。为 someObject 创建一个包装器,然后在分配新值时,将自动重新创建观察者。
如果不清楚,请发布一些代码:-)
推荐阅读
- package - 使用自定义包的 VHDL
- api - 注册失败时如何显示自定义错误消息?(Express、Vue、Axios)
- python - 如何在 Python 中按字符数对列表进行排序?
- python - 在 PyGame 中清除屏幕的最快方法是什么?
- wpf - 如何将数据网格列 ActualWidth 绑定到文本框 MaxLength?
- python - repr 是否足以防止 Python 中的 shell 注入?
- laravel - laravel 下载响应文件名不变
- omniauth - postgres 中的 OmniAuth AuthHash 列使用什么类型?
- html - 微前端和复合 UI - 区别?
- python-3.x - 我想创建一个要求输入并在列表中找到它的程序,所以我在这里做错了什么