AngularFire如何取消订阅Firebase实时数据库

时间:2018-03-22 11:03:10

标签: angular firebase firebase-realtime-database angularfire2

我使用AngularFire库从Firebase Realtime数据库中读取数据。下面是我用来订阅实时数据更改的代码

// db is a reference to AngularFireDatabase
this.dbSubscription = db.list('/authors').valueChanges().subscribe(items =>

对于某些用户操作,我必须更改我正在侦听数据的路径。所以代码看起来像这样

this.dbSubscription.unsubscribe();
this.dbSubscription = db.list('/books').valueChanges().subscribe(items =>

是否正在调用this.dbSubscription.unsubscribe();从数据库中分离应用程序,以便在上一个路径中发生任何数据更改,即/一旦订阅新路径/书籍,作者就不会与应用程序同步?我想确保我不感兴趣的数据不会下载到应用程序中。

2 个答案:

答案 0 :(得分:2)

是的!调用取消订阅实际上会调用.off()方法。你可以看到它here in the source code

  return new Observable<SnapshotPrevKey>(subscriber => {
    const fn = ref[listenType](event, (snapshot, prevKey) => {
      subscriber.next({ snapshot, prevKey });
      if (listenType == 'once') { subscriber.complete(); }
    }, subscriber.error.bind(subscriber));
    if (listenType == 'on') {
      // return a method for unsubscribing the listener
      return { unsubscribe() { ref.off(event, fn)} };
    } else {
      return { unsubscribe() { } };
    }
  })

答案 1 :(得分:1)

你的想法是正确的。

AngularFire没有常规JavaScript library之类的off()等API函数。在JavaScript库中,off()将用于删除数据库上的侦听器。

使用unsubscribe()是在AngularFire中实现目标的正确方法。

可以阅读更多内容here