【问题标题】:AngularFire How to unsubscribe from Firebase Real time databaseAngularFire 如何退订 Firebase 实时数据库
【发布时间】:2018-03-22 11:03:10
【问题描述】:

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

// 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();将应用程序从数据库中分离出来,以便任何数据更改都发生在先前的路径上,即 /authors 在订阅新路径 /books 后不会与应用程序同步?我想确保我不感兴趣的数据不会下载到应用程序中。

【问题讨论】:

    标签: angular firebase firebase-realtime-database angularfire2


    【解决方案1】:

    是的!调用 unsubscribe 实际上会在底层调用 .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() { } };
        }
      })
    

    【讨论】:

      【解决方案2】:

      你的想法是对的。

      AngularFire 没有像 off() 这样的 API 函数,就像常规的 JavaScript library 一样。 off(),在 JavaScript 库中,将用于删除数据库上的侦听器。

      使用unsubscribe() 是在AngularFire 中实现您想要的正确方法。

      更多内容可以阅读here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 2017-04-04
        相关资源
        最近更新 更多