类型'AngularFireList< {}>'上不存在属性'map'

时间:2018-05-05 13:37:51

标签: javascript angular firebase ionic-framework firebase-realtime-database

我正在努力想出这个问题。运行 Ionic Serve 时出现以下错误:

  

“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((feeds)=>

这是我的代码:

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 :(得分:2)

当你在AngularFireDatabase上调用 list 方法时,你会得到一个AngularFireList。即使名称中有 List ,它也不是具有 map 方法的数组或流。

这是此类型的定义(您可以通过在编辑器中使用AngularFireList上的定义或浏览code source来看到这一点):

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

答案 1 :(得分:0)

我们似乎通过以下方式解决了这个问题 - 我们的意思是,所有的功劳归于我的朋友 R.杰克逊即可。

首先,我将此添加到导入

  

从'rxjs / Observable'

导入{Observable}

接下来,在exports部分下,我行:

  

feed:AngularFireList;   至   饲料:可观察;

然后,将这些变化付诸实践

  

this.feeds = afDB.list('/ feed')。valueChanges()。map((feeds:any)

这不会引发任何错误,并且没有任何打嗝。