首页 > 解决方案 > 如何将数据推送到 Typescript 中的 BehaviourSubject?

问题描述

在我的 Ionic / Angular 应用程序中,我正在尝试使用以下代码从 firestore 检索数据:

private _users = new BehaviorSubject<User[]>([]);

return of(
    firebase.firestore().collection("users").get()
        .then((docs) => {
            docs.forEach((doc) => {
                this._users.push(doc);
            });
        }).catch((err) => {
     console.log(err);
    })
);

但是当我尝试编译时出现此错误:

Property 'push' does not exist on type 'BehaviorSubject<User[]>'.

有人可以告诉我如何从这个集合中检索数据并填充_users它吗?

标签: angulartypescriptionic-framework

解决方案


您可以检索您的收藏思想专用BehaviorSubject属性,称为value

docs.forEach((doc) => {
   this._users.next([...this._users.value, doc]);
});

但看起来你可以简单地更新整个数组:

.then((docs) => {
  this._users.next(docs);
})

另外,不要忘记转换DocumentDataUser对象,例如:

interface User {
  id: string;
  name: string;
}

.then((docs) => {
  this._users.next(docs.map(doc => {
    const data = doc.data() as User;
    return { id: doc.id, name: data.name };
  });
})

推荐阅读