我通过服务将对象数组共享给我的组件。所以有一刻我想用新对象的属性替换数组对象的属性之一(我替换了对象)。所以我的共享对象应该在所有使用它的模板中更新。
https://plnkr.co/edit/0sRxSivEaEPLsNAJo7MV?p=preview
// my.component.ts
@Component({
selector: 'my-component',
template: '<div>MyComponent: {{item.name}}</div>',
})
export class MyComponent implements OnInit {
constructor(private myService: MyService) {}
private item = myService.myListData[0];
ngOnInit() {
// 1. - This triggers change detection in app.ts template
this.item.name = 'Name 1111';
setTimeout(() => {
// 2. - This doesn't trigger change detection in app.ts template
let newObj = {name: 'Name 222', age: 225};
this.item = newObj;
}, 3000);
}
}
在我的情况下 //1 更改 app.ts 和 my.component.ts 中的模板值,但 //2 仅在 my.component.ts 中触发更改
我想知道为什么 //2 不更新 app.ts 模板,有没有办法在不循环槽对象属性的情况下做到这一点?
更新: 我设法通过使用 Object.assign() 解决了我的问题。更换对象时没有变化检测。
setTimeout(() => {
// 2. - This doesn't trigger change detection in app.ts template
let newObj = {name: 'Name 222', age: 225};
Object.assign( this.item , newObj);
}, 3000);