为什么替换对象不会触发Angular2中的更改检测?

为什么替换对象不会触发Angular2中的更改检测?,angular,angular2-changedetection,Angular,Angular2 Changedetection,我通过服务将对象数组共享给我的组件。因此,在一瞬间,我想用新对象的属性替换数组对象的属性之一(我替换对象)。因此,我的共享对象应该在使用它的所有模板中更新 我认为OP希望将多个视图绑定到同一个服务数据。 这是一张plunker(经过修改的海报原件),展示了如何做到这一点。基本上将视图绑定到同一个服务成员,而不是组件的单个成员。这样更改会自动反映在所有类似的绑定中 HTML只需绑定到 {{Item}} 我知道这是一个有点老的问题,但我遇到了一个问题,变更检测没有“正确”运行,或者至少在我预期

我通过服务将对象数组共享给我的组件。因此,在一瞬间,我想用新对象的属性替换数组对象的属性之一(我替换对象)。因此,我的共享对象应该在使用它的所有模板中更新


我认为OP希望将多个视图绑定到同一个服务数据。 这是一张plunker(经过修改的海报原件),展示了如何做到这一点。基本上将视图绑定到同一个服务成员,而不是组件的单个成员。这样更改会自动反映在所有类似的绑定中

HTML只需绑定到

{{Item}}

我知道这是一个有点老的问题,但我遇到了一个问题,变更检测没有“正确”运行,或者至少在我预期它会运行的时候

在我的例子中,分配一个我正在观察的变量,我们称之为
oldValue
,并没有触发更改检测。我最初就是这样做的:

// INCORRECT APPROACH
oldValue = newValue
正如OP问题的更新部分所述,一个好的解决方案是使用
Object.assign()

在这种情况下(以我的经验),更改检测将在
oldValue
上运行


干杯

相当多的标题,但几乎没有上下文。请发布组件类,包括
@Component()
装饰器和组件的模板,并解释实际行为和预期行为。好的,我想现在就可以了。谢谢这里仍然没有HTML<代码>let之前的
let项
是多余的,甚至是无效的(不是TS pro)。我认为这个变量赋值代码应该在一个方法中。你这样做没有道理,我想是的。无论您是否更改了某些内容,更改检测总是在发生。您可能正在谈论的是更改检测是否应该检测更改并更新视图。为此,我们需要查看您的视图(HTML)以及您对实际和预期行为的解释。您似乎期望的与更改检测无关。如果将新的(不同的)对象分配给
此.item
,则
AppComponent
MyComponent
之间不再存在连接。为什么您希望在
AppComponent
中更新任何内容?
@Component({ 
    selector: 'my-component',
    template: '<div>MyComponent: {{myService.Item.name}}</div>',
})
export class MyComponent implements OnInit {
   constructor(private myService: MyService) {}

   private item = myService.myListData[0];

   ngOnInit() {
     // 1. - This triggers change detection
     this.item.name = 'Name 1111'
     this.myService.Item = this.item;

     setTimeout(() => {
       // 2. - This doesn't trigger change detection in app.ts template
       let newObj = {name: 'Name 222', age: 225};
       this.myService.Item = newObj;
     }, 3000);
   }
}
Item = Alias of MyService.Item ;
{{Item}}
// INCORRECT APPROACH
oldValue = newValue
// CORRECT APPROACH
Object.assign(oldValue, newValue)