我正在努力想出这个问题。运行 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
})
})
}
}
我正在学习,如果答案很明显,请解释一下。提前谢谢。
答案 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)
这不会引发任何错误,并且没有任何打嗝。