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
之外不由自主地执行...
我有这个模板的组件:
<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
之外不由自主地执行...