AngularFire2 检索不订阅更改(Firestore)

Jon*_*han 3 angularfire2 angular

在我的网站中,我想按名称显示项目列表。这些名称是可点击的,然后应该下载整个文档,您可以编辑和保存该项目。

目前我正在使用文档中描述的方式从我的 FireStore 查询收集数据:https : //github.com/angular/angularfire2/blob/master/docs/firestore/collections.md

  private itemsCollection: AngularFirestoreCollection<Item>;
  items: Observable<Item[]>;
  constructor(private afs: AngularFirestore) {
    this.itemsCollection = afs.collection<Item>('items');
    this.items = this.itemsCollection.valueChanges();
  }
Run Code Online (Sandbox Code Playgroud)

问题是,我希望或者对我的名单需要实时更新。所以 Observable 方法对我的应用程序没有意义。

我想出的唯一方法是我只使用 snapshotChanges 方法,并将其映射到一个数组,然后我将其分配给一个字段。然后映射函数,将 items 和 itemsCollection 字段设置为 null,这样它们就不会浪费更多的带宽。但这对我来说似乎不对。

有没有办法在 AngularFire 中只查询一次集合,最好使用查询参数,然后显示它?

Nic*_*esa 5

我处理这个问题的一种方法是使用rxjs/add/operator/first. 此方法获取 Observable 数据一次,然后结束订阅。

只需导入上面的库并像这样拨打电话:

this.items = this.itemsCollection.valueChanges().first();

那么你可以订阅它,它只会获取一次数据:

this.items.subscribe((items) => { // do something with items array // });

我知道还有其他方法可以使用 rxjsdo()和方法来处理这个问题,take()因为您可能想要研究这些。我希望这能有所帮助!