Свойство map не существует для типа AngularFireList <{}> - PullRequest
0 голосов
/ 05 мая 2018

Мне тяжело пытаться понять это. Я получаю следующую ошибку при запуске Ionic Serve :

Свойство 'map' не существует для типа 'AngularFireList <{}>'.

Я искал исправление в течение некоторого времени и не могу найти ничего, что сработало, так что вот и я. Текущие версии:

Ionic Framework: 3.9.2
Ionic App Scripts: 3.1.9
Angular Core: 5.0.1
Angular Compiler CLI: 5.0.1
Node: 9.11.1

Я исправил все другие ошибки и перенес все на более новые версии (изменив списки Firebase на Angular .)

Код, который выдает ошибку - это объект .map () , здесь:

afDB.list ('/ feed'). Map ((каналы) =>

Это мой код:

import { Component  } from '@angular/core';
import { IonicPage, NavController, NavParams, ModalController , 
LoadingController} from 'ionic-angular';
import { AngularFireDatabase, AngularFireList} from 'angularfire2/database';
import 'rxjs/add/operator/map'; // you might need to import this, or not 
depends on your setup

@IonicPage()
@Component({
  selector: 'page-feed',
  templateUrl: 'feed.html'
})

export class FeedPage {

  feeds: AngularFireList<any[]>;
  feedView: string = "activity";

  constructor(public navCtrl: NavController, public navParams: NavParams ,public modalCtrl: ModalController,public loadingCtrl: LoadingController, public     afDB: AngularFireDatabase) {

    let loadingPopup = this.loadingCtrl.create({
      spinner: 'crescent',
      content: ''
    });
    loadingPopup.present();
    this.feeds = <AngularFireList<any[]>> afDB.list('/feed').map((feeds) => {
          return feeds.map((feeds) => {
              feeds.images = afDB.list('/feed/'+feeds.$key+'/images')
              loadingPopup.dismiss().catch(() => console.log('ERROR CATCH: LoadingController dismiss'));
              return feeds                      
          })
      }) 
  }
}

Я учусь, поэтому, если ответ очевиден, объясните, пожалуйста. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Мы, кажется, исправили это, выполнив следующее - и мы имеем в виду, что вся заслуга принадлежит моему другу R. Джексон .

Сначала я добавил это к импорту

import {Observable} из 'rxjs / Observable'

Далее, в разделе экспорта, я в строке:

каналы: AngularFireList; в каналы: наблюдаемые;

затем, добавив эти изменения в игру

this.feeds = afDB.list ('/ feed'). ValueChanges (). Map ((feeds: any)

Это больше не приводит к ошибкам и служит без ошибок.

0 голосов
/ 05 мая 2018

Когда вы вызываете метод list в AngularFireDatabase, вы получаете AngularFireList. Несмотря на то, что в названии есть List , это не массив или поток, который будет иметь метод map .

Это определение для этого типа (вы можете увидеть это, перейдя к определению AngularFireList в вашем редакторе или просмотрев код источника ):

export interface AngularFireList<T> {
  query: DatabaseQuery;
  valueChanges(events?: ChildEvent[]): Observable<T[]>;
  snapshotChanges(events?: ChildEvent[]): Observable<SnapshotAction[]>;
  stateChanges(events?: ChildEvent[]): Observable<SnapshotAction>;
  auditTrail(events?: ChildEvent[]): Observable<SnapshotAction[]>;
  update(item: FirebaseOperation, data: T): Promise<void>;
  set(item: FirebaseOperation, data: T): Promise<void>;
  push(data: T): ThenableReference;
  remove(item?: FirebaseOperation): Promise<void>;
}

Чтобы получить поток, вам нужно использовать один из методов, возвращающих Observable, и предполагая, что вам нужны значения, которые будут valueChanges. Поэтому ваш код должен выглядеть примерно так:

afDB.list('/feed').valueChanges.map(...)

И результатом будет поток, означающий Observable<any>. Это означает, что в шаблоне вам нужно будет использовать Async pipe .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...