离子和AngularFire2最好退订观测实践(Ionic & AngularFire2 best

2019-09-30 00:45发布

我有一个多页的离子 - 角手机应用程序使用AngularFire2与公司的FireStore。 其中一个我很喜欢公司的FireStore的事情之一是数据的离线持久性。 我的问题是围绕这个数据持久性和最佳实践退订AngularFire2流观测。

我的主页是事件的列表,并且在选择一个事件的应用路线单一活动页面与此特定事件的详细信息。 目前,我同意使用基于单一事件组件ngOnInit内公司的FireStore所选事件的doc ID AngularFire2 API的单一事件。

我的角度观测的理解是,建议导航回到了组件的时候退订观测。 但是,如果我这样做在单事件组件和用户不知何故失去互联网连接时,当他们浏览到主页,然后回一个单一事件,没有数据,因为数据流可观察已取消订阅和应用程序不能咨询公司的FireStore。 现在,如果我不退订,那么单一事件页面仍然即使离线显示的数据。 这是我想要的行为,但它是一个问题,不知何故,离开单一事件页面时,我不退订观测?

它是重要的退订在基于离子手机应用程序甚至可观测量? 或者我应该重新架构我的应用程序全部实现最佳做法? 感谢您的任何投入!

Answer 1:

它是重要的退订在基于离子手机应用程序甚至可观测量?

是的,否则,如果你要离开页面,回来它会创建另一个订阅到同一观察到,这将导致内存泄漏。

有几个方法,我知道的,当你离开的NAV停止订阅。
1.创建,分配并从取消Subscription

foo$: Observable<Foo>;
fooSub: Subscription;

constructor() {
  this.fooSub = this.foo$.subscribe(foo => { console.log(foo); });
}

ionViewDidLeave() {
  this.fooSub.unsubscribe();
}

2.创建一个布尔认购运行时限制。

active: boolean = true;
foo$: Observable<Foo>;

constructor() {
  this.foo$.takeWhile(() => this.active).subscribe(foo => { console.log(foo); });
}

ionViewDidLeave() {
  this.active = false;
}

使用ionViewDidLeaveIonicPage组件和ngOnDestroy自定义组件。

如果你想要的数据持久化,而设备是离线,你应该看看NGRX /店 。



文章来源: Ionic & AngularFire2 best practice for unsubscribing to observables