所以我遇到了这个问题。我有一个使用
的组件 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>
...
...
问题在于,使用这种策略,即使我进行了某些更改,也不会渲染组件。这是执行编辑之前数组的外观:
请注意,showEye设置为true
在此之后:
您可以看到showEye
现在为假。但猜猜怎么了? html中没有任何更改。
所以我的问题是,由于我无法删除该策略,如何“告诉”组件重新自我渲染?
答案 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,因此已禁用了自动更改检测,因此需要自己触发。