javascript - ngOnChanges 不会在 native 或移动网络中触发。 ionic 4

标签 javascript angular ionic-framework mobile ionic4

我有一个带有这个模板的组件:

 <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/

相关文章:

javascript - Ionic 2 - 将 ngFor 中的第一个值选择为 true

javascript - 从 json 到 View 的 AngularJs 数据绑定(bind)

node.js - Node/Express 与 Angular 2

node.js - 安装 Ionic 框架 - 设置环境变量 - 不起作用。

angular - 覆盖只读/禁用样式/CSS

git - 使用标签从 github 安装 NPM

iframe - 如何解决youtube-2的youtube嵌入视频的受限内容?

javascript - jQuery on(click)/click 事件未触发

javascript - 如何使用 React Native 在 Android 上使用与 ios 相同的自定义字体

javascript - javascript 中的客户端 MVC 轻量级框架?