我有一个如下物体
result = [{
"name": "jmd",
"children": [
{
"name": "ppp1",
"children": [
{
"name": "feeder",
"children": [
{
"name": "rmu1",
"children": [
{
"name": "IT1",
"children": [
{
"aname": "Asset123",
"value" : "233"
}
]
}
]
}
]
}
]
}]
每次使用ngOnchanges
的{{1}}事件更改值时,我都需要检测更改。
似乎有角Angular 6
不能检测到深度嵌套的对象。我尝试过类似
ngOnchanges
什么都没有,任何帮助将不胜感激:)
答案 0 :(得分:0)
this.chartData = Object.assign({}, result);
this.chartData = {...result};
这不会克隆整个对象,它只会更改顶根对象,例如 如果您有这样的物体
var car = {
model :"bmw",
wheel:{
type:"rounded",
color:"black"
}
}
然后您使用分配
let anotherCar = {...car} //or Object.assign it's almost same)
car对象将是新的,而wheel对象将是相同的,而car和anotherCar将引用同一对象,因此您必须进行深度克隆,目前最简单的方法是使用JSON方法
var newCar = JSON.parse(JSON.stringify(car)); // it will create whole new object
答案 1 :(得分:0)
有关Object.assign()
和{...obj}
对象复制的快速说明:
它们都对对象进行了浅的复制,这意味着将仅复制自己的顶级属性。
一个例子:
const obj = {a: 5};
const withNested = {b: 4, nested: obj};
const copy = {...withNested};
copy.nested === withNested.nested // outputs 'true' meaning the objects are the same and have not been copied
上面的代码显示嵌套对象将不会被克隆。
为了使您的代码正常工作,请手动进行深度克隆:{...a, b: {...source.b}}
或使用lodash
的{{3}}