Как получить полезную нагрузку и идентификатор документа из snapshotChanges в angular 6? - PullRequest
0 голосов
/ 29 июня 2018

Ниже приведен фрагмент кода, который не работает в угловом формате 6. Компилятор показывает ошибку, так как «Свойство map» не существует для типа «{}» для функции внутренней карты. Может кто-нибудь подсказать мне, как получить полезную нагрузку и идентификатор из изменений снимка.

Код:

this.postCollection.snapshotChanges().pipe(
      map(actions => actions.map(a => {      //this inner map throws error >Property 'map' does not exist on type '{}'
        const data = a.payload.doc.data() as Post;
        const id = a.payload.doc.id;
        return { id, ...data };
      }))
    );

dependecies:

"dependencies": {
    "@angular/animations": "^6.0.0",
    "@angular/cdk": "^6.3.1",
    "@angular/common": "^6.0.0",
    "@angular/compiler": "^6.0.0",
    "@angular/core": "^6.0.0",
    "@angular/forms": "^6.0.0",
    "@angular/http": "^6.0.0",
    "@angular/material": "^6.3.1",
    "@angular/platform-browser": "^6.0.0",
    "@angular/platform-browser-dynamic": "^6.0.0",
    "@angular/router": "^6.0.0",
    "angularfire2": "^5.0.0-rc.11",
    "core-js": "^2.5.4",
    "firebase": "^5.1.0",
    "rxjs": "^6.0.0",
    "zone.js": "^0.8.26"
  },

Спасибо.

1 Ответ

0 голосов
/ 05 июля 2018

Редактировать с реальным ответом

Я нашел проблему. Вам необходимо объявить вашу postCollection как AngularFirestoreCollection. Вот как я это сделал для своего кода ниже:

    updatedb: AngularFirestoreCollection<item>;

Тогда я мог бы использовать его, не получив ошибку карты. Надеюсь, это поможет!

Прошлое (работает, но не самый лучший) Ответ

У меня та же проблема. Я думаю, что это связано с вашей переменной postCollection. Когда я положил туда полную коллекцию db.collection ... это сработало для меня. Не уверен, что это как-то о том, как объявлена ​​эта переменная (у меня только что была моя переменная общего назначения, не назначенная вверху файла.

Это не сработало:

export class DataService {

items$: Observable<any>;
selectedItem$: Observable<any>;
selected3x3: item = new item();
timeout;
email: string;
updatedb;

get3x3s(){
    if(!this.email){
        this.items$ = this.updatedb.snapshotChanges().pipe(
            map(changes => {
                return changes.map(doc => {
                    return{
                        id: doc.payload.doc.id,
                        data: doc.payload.doc.data()
                    }
                })
            })
        );

Но это скомпилировано:

export class DataService {

items$: Observable<any>;
selectedItem$: Observable<any>;
selected3x3: item = new item();
timeout;
email: string;
updatedb;

get3x3s(){
    if(!this.email){
        this.items$ = this.db.collection(this.email).snapshotChanges().pipe(
            map(changes => {
                return changes.map(doc => {
                    return{
                        id: doc.payload.doc.id,
                        data: doc.payload.doc.data()
                    }
                })
            })
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...