如何取消订阅Angular2中的Firebase列表?

时间:2017-02-20 03:46:27

标签: angular firebase firebase-realtime-database

我正在使用

连接到Firebase列表
tasks: FirebaseListObservable<ITask[]>;

constructor(private af: AngularFire) {
  this.tasks = this.af.database.list("/tasks");
}

现在我想在用户退出时取消该连接。

我已经尝试了this.tasks.unsubscribe(),但看起来该方法未定义(我试过这个,因为FirebaseListObservable是一个可观察的。)

我也按照文档中的建议尝试了this.tasks.off(),但它也未定义。

最后,我尝试this.tasks = null并且这样做有效,但我不确定这是否是正确的实现。

1 个答案:

答案 0 :(得分:7)

this.tasksObservable而不是Subscription,这就是您无法取消订阅的原因。

如果您手动订阅,则可以:

let observable = Rx.Observable.interval(1000);
let subscription = observable.subscribe(x => console.log(x));
subscription.unsubscribe();

如果您使用的是async pipe,那么当组件被销毁时,Angular会自动取消订阅。如果管道的值变为null,则基于source code,observable将被取消订阅,但在任何地方的文档中都没有指定。我认为更好的选择是明确销毁使用异步管道的组件。