我有一个带有这个模板的组件:
<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
被触发。问题是,当我从移动浏览器或编译的 native 应用程序使用该应用程序时,它不会触发。要触发它,在 records
更改后,我必须在屏幕上按任何东西(不是空格,而是交互式元素。它不必与组件或那个相关属性(property))。
它发生在实体手机和模拟器、Android 和 iOS 中。
我什至尝试过使用 ngDoCheck
,但它也没有触发。我有点绝望,有人知道会发生什么吗?
我正在使用 Ionic 4 和 Angular 8
最佳答案
好吧,我花了一段时间才弄清楚发生了什么。原来给records
赋新值的操作发生在ngZone
之外。对于任何不熟悉这一点的人来说,区域就像一个封闭的环境,进程在其中运行,而 ngZone
是 Angular 运行异步操作的地方,并将相应地更改 UI。
反之亦然。如果在 ngZone
之外执行某些操作,Angular 的 ChangeDetection 将不会监听它,我们的 UI 也不会更改。幸运的是,您可以使用 ngZone.run()
强制某些内容在 ngZone
中运行。您还可以在它之外运行繁重的操作,这样 Angular 就不会不必要地刷新 UI,从而优化您的应用。
但是,我仍然不知道为什么这个特定的操作是在 ngZone
之外不由自主地执行的......
关于javascript - ngOnChanges 不会在 native 或移动网络中触发。 ionic 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59032672/