Javascript ngOnChanges不会在本机或移动web中触发。离子4
我有一个具有此模板的组件:Javascript ngOnChanges不会在本机或移动web中触发。离子4,javascript,angular,ionic-framework,mobile,ionic4,Javascript,Angular,Ionic Framework,Mobile,Ionic4,我有一个具有此模板的组件: <app-graph-grouped-vertical [results]="graphRecords" [series]="graphPredictions" [seriesColors]="predictionColors" [xAxis]="xAxis" ></app-graph-grouped-vertical&g
<app-graph-grouped-vertical
[results]="graphRecords"
[series]="graphPredictions"
[seriesColors]="predictionColors"
[xAxis]="xAxis"
></app-graph-grouped-vertical>
在图形组垂直组件中,我得到了以下信息:
export class GraphGroupedVerticalComponent extends GraphBaseComponent<GroupedResultDto>
implements OnChanges, OnInit, OnDestroy, DoCheck {
...
@Input() results!: GroupedResultDto[]
ngOnChanges(changes: SimpleChanges){console.log('Triggered')}
...
}
导出类GraphGroupedVerticalComponent扩展GraphBaseComponent
实现OnChanges、OnInit、OnDestroy和DoCheck{
...
@输入()结果!:GroupedResultDto[]
ngOnChanges(更改:SimpleChanges){console.log('Triggered')}
...
}
因此,当我从计算机进入浏览器,父组件中的属性graphRecords
发生更改时,一切正常,并且子组件中的ngOnChanges
被触发。问题是,当我从移动浏览器或编译的本机应用程序使用应用程序时,它不会触发。要触发它,在记录
发生更改后,我必须按下屏幕上的某些内容,任何内容(不是空白,而是交互元素。它不必与组件或该属性相关)
它发生在物理手机和模拟器、Android和iOS中
我甚至尝试过使用ngDoCheck
,但它也不会触发。我有点绝望,有人知道会发生什么吗
我用的是离子4和角8,我花了一段时间才弄清楚到底发生了什么。事实证明,将新值分配给
记录的操作发生在ngZone
之外。对于任何不熟悉这一点的人来说,区域就像一个运行进程的封闭环境,ngZone
是Angular运行异步操作的地方,并将相应地更改UI
这也与此相反。如果在ngZone
之外执行某些操作,Angular的ChangeDetection将不会侦听它,我们的UI也不会更改。幸运的是,您可以使用ngZone.run()
强制在ngZone
内部运行某些内容。您还可以在它之外运行繁重的操作,这样就不会不必要地刷新UI,从而优化您的应用程序
然而,我仍然不知道为什么这个特定的操作是在ngZone
之外非自愿地执行的