如何在所有子组件中手动调用更改检测?

时间:2019-05-24 04:41:50

标签: dart angular-dart angular2-changedetection

我正在使用Angle dart开发Web应用程序。

我有一个组件A,它的模板中有'n'个组件B。

组件A通过输入绑定为组件B提供数据。

组件A处理发布到API以及从API获取信息。

只要组件A中的数据发生更改,它就应该在组件B中进行更新。

但我看不到这种情况。

我在组件B中使用了ngOnChanges和ngAfterChanges,但是当组件A中的数据发生更改时,它没有被调用。

B组件很多(例如800个),因此每当A组件中的数据发生更改时,我就无法手动调用每个组件中的更改检测。

只要A中的数据发生更改,我应该怎么做以自动更新组件B中的数据?

component_a.html:

<ng-container *ngFor="let nameMap of maps">
   <component_b [nameMap]="nameMap">
   </component_b>
</ng-container>

component_b.dart:

class ComponentB {
  @Input()
  Map<int, String> nameMap;
}

假设ComponentA中nameMap项的值已更改。如何在ComponentB中反映出来?

TIA。

1 个答案:

答案 0 :(得分:0)

因此,angular的工作方式是使用身份来识别绑定何时更改。因此,在这种情况下,如果地图实例未更改,则不会知道自己进行更新。

父母没有办法使下面的树无效,孩子有办法使FWIW上面的树无效,这就是markForCheck的作用。

有两种方法可以使它起作用:

  • 在数据更改时为实例创建一个新映射(此 是我的建议)
  • 使用ObservableMap并监听更新 在地图上,在ComponentB中调用markForCheck并将其设置为OnPush