我是否错误地理解了 Ionic Angular 的路由?

Do I understand the routing with Ionic Angular wrongly?

你好,

我是一名 Angular 开发人员,最近接触了 Ionic,我有一些关于 Ionic 生命周期实现与 Angular 相结合的主题。

社区并没有真正注意到我在这里描述的问题,所以我只是想知道我是否做错了什么或者所描述的观点在某种程度上是有效的。

Angular async pipes

异步管道仅在页面完全销毁时取消订阅(例如导航到根目录)。在此之后,他们只会在创建组件的全新实例时再次订阅。这可能会使它们在每次启动组件时尝试获取新值时变得过时。

我想到的一个“解决方案”是在离子生命​​周期挂钩中重新初始化 observable objects 以强制默认 Angular 行为。缺点是这会在后台生成许多等待订阅,即使它们只是等待销毁。

child 个组件中的 OnDestroy

假设我们有一个带有 child 组件的 Ionic 页面。 child 组件是一个 qr-code 扫描仪,可以从外部库访问相机。导航到组件时会打开相机流。 应该在进一步导航时再次关闭。

问题是由于 Ionic 路由缓存,parent 页面被缓存。这导致 child 的 OnDestroy 生命周期挂钩未被调用。 child 现在不知道它是否正在使用,并且在导航到下一页时不会停用相机流。接下来是始终打开的相机流。

此处的解决方法是使用仅在 parent 页面打开时才有效的条件,并在 child 组件周围放置 *ngIf

child 个组件中的 OnInit

当 child 组件依赖于 parent 页面提供的值时,生命周期执行顺序可能会变得困难。

默认顺序Parent ngOnInit -> Child ngOnInit -> Parent ionViewWillEnter -> Parent ionViewDidEnter

如果 parent 在它的 ionViewWillEnter 中设置类似 resourceId 的东西并为他们的 children 提供它,我们不能依赖 [= =59=]ren 因为在执行 children 的 ngOnInit 时可能不会设置它。我还假设这可能会变得更糟,因为 child 的初始化是在 parent 初始化之前执行的。

请注意 child 中的离子生命周期挂钩根本没有执行,as described in the Ionic forums

你应该去官方看板看看: https://forum.ionicframework.com/t/do-i-understand-the-routing-wrongly/217860/2