Свойство 'map' не существует для типа 'Observable ' - PullRequest
0 голосов
/ 16 апреля 2020

Я получаю следующую ошибку в файле служб, предложите внести изменения в код: -

Свойство 'map' не существует для типа 'Observable []>'.

My Event.ts содержит интерфейс с 5 объявленными параметрами, которые являются id: string; код: строка; имя: строка; пароль: строка; pollCat: string;

events.service.ts: -

import { Injectable } from '@angular/core';
    import { AngularFirestore , AngularFirestoreCollection, AngularFirestoreDocument} from 'angularfire2/firestore';
    import { Event } from '../models/Event';
    import { Observable } from 'rxjs';
    import {map} from 'rxjs/operators';


    @Injectable({
      providedIn: 'root'
    })
    export class EventsService {

      eventsCollection : AngularFirestoreCollection<Event>;
      events: Observable<Event[]>;

      constructor(public afs: AngularFirestore) { 
        this.events = this.afs.collection<Event>('Events').snapshotChanges().map(changes => {
          return changes.map(a => {
            const data = a.payload.doc.data() as Event;
            data.id = a.payload.doc.id;
            return data;
          })
        });
      }

      getEvents()
      {
        return this.events;
      }
    }

events.component.ts: -

import { Component, OnInit } from '@angular/core';
import { EventsService } from 'src/app/services/events.service';
import { Event } from '../../models/Event';


@Component({
  selector: 'app-events',
  templateUrl: './events.component.html',
  styleUrls: ['./events.component.css']
})
export class EventsComponent implements OnInit {

  events: Event[];

  constructor(public eventsService: EventsService) { }

  ngOnInit() {
    this.eventsService.getEvents().subscribe(events => {
      this.events = events;
      console.log(events);
    });
  }
}

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Мы не можем использовать RX JS операторы, подобные этому, нам нужно заключить их в метод pipe. Пожалуйста, внесите следующие изменения.

      constructor(public afs: AngularFirestore) { 
        this.events = this.afs.collection<Event>('Events').snapshotChanges().pipe(
map(changes => {
          return changes.map(a => {
            const data = a.payload.doc.data() as Event;
            data.id = a.payload.doc.id;
            return data;
          })
        }));
      }
0 голосов
/ 16 апреля 2020

Какая у вас версия Rx Js? Начиная с версии 5.5 вам необходимо использовать pipe :

this.events = this.afs.collection<Event ('Events').snapshotChanges()
    .pipe(
        map(changes => {
            return changes.map(a => {
                const data = a.payload.doc.data() as Event;
                data.id = a.payload.doc.id;
                return data;
            });
        })
    );
...