组件更新问题

时间:2018-09-14 12:50:29

标签: angular typescript

所以我遇到了这个问题。我有一个使用

的组件

changeDetection: ChangeDetectionStrategy.OnPush

该组件具有以下逻辑:

ngOnInit(){
  this.serivce.something
  .subscribe( evt => {
    // Logic that update values of the array (the logic works)
  });
}

html是这样的:

...
...
<div *ngFor="let item of myArray">
  <span *ngIf="item.showEye">TRUE</span>
  <span *ngIf="!item.showEye"> FALSE</span>
</div>
...
...

问题在于,使用这种策略,即使我进行了某些更改,也不会渲染组件。这是执行编辑之前数组的外观:

enter image description here

请注意,showEye设置为true

在此之后:

enter image description here

您可以看到showEye现在为假。但猜猜怎么了? html中没有任何更改。

所以我的问题是,由于我无法删除该策略,如何“告诉”组件重新自我渲染?

1 个答案:

答案 0 :(得分:1)

要更新您的html,请尝试以下操作:

constructor(private cd: ChangeDetectorRef) {...}

ngOnInit(){
    this.serivce.something
        .subscribe( evt => {
            // Logic that update values of the array (the logic works)
            this.cd.detectChanges(); // Triggers a change detection run
    });
} 

由于已将changeDetection设置为ChangeDetectionStrategy.OnPush,因此已禁用了自动更改检测,因此需要自己触发。