как извлечь результат AngularFirestoreCollection в массив

Приложение, которое я пытаюсь разработать, позволяет выбирать язык с помощью поля ввода Material2 Select. Доступные языки хранятся в коллекции документов Firestore. Я использую AngularFirestoreCollection для их получения, но не могу понять, как извлечь имена языков из результата и поместить их в массив.

Я искал в Google примеры и учебные пособия, читал и перечитывал страницы документации и нашел много примеров, использующих «* ngFor», но я не могу найти ни одного, использующего «карту», ​​который, как я подозреваю, является тем, что мне нужно использовать.

Заранее спасибо.

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

Я хочу отобразить "languagecollection = this.languageCollection.valueChanges ();" в массив.


person Jie Hart    schedule 08.12.2017    source источник
comment
опубликуйте код, который вы пробовали.   -  person Hareesh    schedule 08.12.2017
comment
Извините, что я так долго отвечал, но я на другом конце света. languageid: строка; languageName: строка; languageCollection: AngularFirestoreCollection ‹any› = this.afs.collection ('Страны / Австралия / cLanguage'); languagecollection = this.languageCollection.valueChanges (); языки: строка []; // Мне нужно = ›карта (mappedData)   -  person Jie Hart    schedule 09.12.2017


Ответы (2)


Я думаю, вы можете попробовать что-то вроде: (непроверено. Прокомментируйте, если это неправильно)

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)
    });*/
});
person Makah    schedule 09.12.2017
comment
Я получаю сообщение об ошибке в take (1): [ts] Свойство take не существует для типа Observable ‹{} []› '. - person Jie Hart; 09.12.2017
comment
Я думаю, take(1) работает в последней версии. Но вы можете удалить его и воспользоваться атуализацией в реальном времени. - person Makah; 11.12.2017

Я обнаружил, что этот код делает то, что мне нужно

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