首页 > 解决方案 > 离子生命周期取消/订阅 Firebase 数据库流(使用异步管道)

问题描述

我将 Ionic 5 与 Firebase 实时数据库和 Firestore (angularfire) 以及 Angular Routing 一起使用。在大多数页面上,我都在流式传输数据库内容。由于离子生命周期,离开视图时页面不会被破坏。正如我在 Angular 中所做的那样,我在 ngOnInit 中声明了我的 Observables。

public data$: Observable<Data[]>;

  ngOnInit() {
      this.data$ = this.dataService.retrieveData();

在我的模板中,我使用的是异步管道。

当组件被销毁时,异步管道将自动取消订阅。但是由于离子生命周期,离开视图时不会发生这种情况。

问题 1: 离开视图时保持数据库流打开是一种好习惯(并且仅在调用 onNgDestroy 时取消订阅)?

问题 2: 如果更喜欢使用生命周期钩子(即 ionViewWillEnter、ionViewWillLeave),则无法使用异步管道,所以我必须自己订阅和取消订阅。不使用异步管道听起来不合理。这在哪些用例中有意义?

标签: angularionic-frameworkfirebase-realtime-databasegoogle-cloud-firestorerxjs

解决方案


问题1:我认为这是个人考虑。但在大多数情况下,离开页面时保持流打开也没有意义。

问题2:看到Q1,你应该使用ionViewWillEnter订阅和ionViewWillLeave取消订阅。在这种情况下,异步管道没有意义。

最后,我对自己的离子生命周期并不满意。但事实就是这样。


推荐阅读