ngOnChanges 不会在本机或移动网络中触发。离子4

ngOnChanges not fired in native or in mobile web. Ionic 4

我有这个模板的组件:

 <app-graph-grouped-vertical
      [results]="graphRecords"
      [series]="graphPredictions"
      [seriesColors]="predictionColors"
      [xAxis]="xAxis"
></app-graph-grouped-vertical>

GraphGroupedVerticalComponent 中,我得到了这个:

export class GraphGroupedVerticalComponent extends GraphBaseComponent<GroupedResultDto>
  implements OnChanges, OnInit, OnDestroy, DoCheck {
...
 @Input() results!: GroupedResultDto[]

 ngOnChanges(changes: SimpleChanges){console.log('Triggered')}
...

}

因此,当我从计算机进入浏览器并且父组件中的 属性 graphRecords 更改时一切正常,子组件中的 ngOnChanges 被触发。问题是,当我从移动浏览器或编译的本机应用程序使用该应用程序时,它不会触发。为了触发它,在 records 更改后我必须在屏幕上按任何东西(不是空白 space,而是一个交互式元素。它不必与组件相关或属性).

它发生在实体手机中在模拟器中,Android和iOS。

我什至尝试过使用 ngDoCheck,但它也没有触发。我有点绝望,有人知道会发生什么吗?

我正在使用 Ionic 4 和 Angular 8

好吧,我花了一段时间才弄清楚发生了什么。原来给records赋新值的操作发生在ngZone之外。对于任何对此不熟悉的人来说,区域就像一个封闭的环境,其中进程是 运行,而 ngZone 是 Angular 运行 异步操作的地方,并且会改变 UI 相应地。

反之亦然。如果有东西在ngZone之外执行,Angular的ChangeDetection不会监听,我们的UI也不会改变。幸运的是,您可以使用 ngZone.run()ngZone 中强制某些内容 运行。您还可以 运行 在它之外进行繁重的操作,这样 Angular 就不会不必要地刷新 UI,从而优化您的应用程序。

但是,我仍然不知道为什么这个特定的操作在ngZone之外不由自主地执行...