【问题标题】:how to extract the result of an AngularFirestoreCollection into an array如何将 AngularFirestoreCollection 的结果提取到数组中
【发布时间】:2017-12-08 11:02:40
【问题描述】:

我正在尝试开发的应用程序允许使用 Material2 Select 输入字段选择语言。可用语言保存在 Firestore 文档集合中。我使用 AngularFirestoreCollection 来检索它们,但无法找出如何从结果中提取语言名称并将它们放入数组中。

我在谷歌上搜索了示例和教程,阅读并重新阅读了文档页面,并找到了许多使用“*ngFor”的示例,但我找不到任何使用“地图”的示例,我怀疑这是我需要使用的。

提前谢谢你。

  languageid: string;
  languageName: string;
  languageCollection: AngularFirestoreCollection<any> = this.afs.collection('Countries/AU/cLanguage');
  languagecollection = this.languageCollection.valueChanges();
  languages: string[];

我想映射“languagecollection = this.languageCollection.valueChanges();”到一个数组。

【问题讨论】:

  • 贴出你试过的代码。
  • 抱歉这么久才回复,但我在世界的另一端。语言标识:字符串;语言名:字符串; languageCollection: AngularFirestoreCollection = this.afs.collection('Countries/AU/cLanguage'); languagecollection = this.languageCollection.valueChanges();语言:字符串[]; // 我需要 => map (mappedData)

标签: angular angularfire2 google-cloud-firestore


【解决方案1】:

我认为您可以尝试以下方法:(未经测试。如有错误请评论)

let languages: string[];
let collection = this.afs.collection('Countries/AU/cLanguage').valueChanges();

//if you want to Firebase's .once(), use take(1)
let storeTask = collection.subscribe((langs) => {
    languages = langs;

    //Or 
    /*Object.keys(langs).map(function(key, index) {
       languages.push(langs[key].name)
    });*/
});

【讨论】:

  • 我在 take(1) 上得到一个错误:“[ts] Property 'take' does not exist on type 'Observable'.
  • 我认为take(1) 在最新版本中有效。但是您可以删除它并利用实时实现。
【解决方案2】:

我发现这段代码可以满足我的需要

querySnapshot.forEach(function (doc) {
    let name = doc.data()['languageName']; 
    lang.push(name);
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多