我正在尝试通过list
函数从Firebase获取数据,并以Json格式使用它(在我的Google地图上加载标记)。但我在回复snapshots
:地图'地图'时遇到了问题。类型' {}'
我的进口商品:
import { Component, ViewChild, ElementRef } from '@angular/core';
import { NavController, IonicPage } from 'ionic-angular';
import { Geolocation } from '@ionic-native/geolocation';
import { AngularFireDatabase } from 'angularfire2/database';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
带有错误的代码段:
markers: Observable<any[]>;
constructor(public navCtrl: NavController,
public geolocation: Geolocation,
public db: AngularFireDatabase) {
this.markers = this.db.list("empresa/", {preserveSnapshot: true})
.map(snapshots => {
return snapshots.map(snapshot => { // this second .map displays the error
return snapshot.val();
})
.subscribe((marcas)=> {
console.log(marcas);
});
});
}
因此,我认为subscribe
在控制台上没有显示任何内容。我还尝试以不同的方式导入rxjs,如此链接Property 'map' does not exist on type 'Observable<Response>',但没有成功。
答案 0 :(得分:0)
似乎是迁移问题 - since AF 5.0 list
返回AngularFireList<T>
服务,而非FirebaseListObservable
,您必须在其上调用an action以将数据流式传输到一个可观察的集合,例如:
const subscription = this.db.list("empresa/").snapshotChanges()
.map(snapshots => {
return snapshots.map(snapshot => snapshot.payload.val());
})
.subscribe(values => {
console.log(values);
this.markers = values;
});
另请注意,subscribe
在外map
之后被链接,而不是在示例中的内部;并且this.markers
正在订阅中分配了结果,因此您必须将其类型从Observable<any[]>
更改为any[]
(或者不管它们是什么,只是不可观察)。
有关详细信息,请参阅文档中的3. Retrieving data as lists;在页面末尾有一个示例,使用带有异步管道的角度模板中列出的项目,您不需要subscribe
,然后您将this.markers
保留{{ 1}}为Observable<any[]>
,其余为:
this.markers = this.db.list("empresa/").snapshotChanges()
.map(snapshots => {
return snapshots.map(snapshot => snapshot.payload.val());
});
这是首选,因为异步管道为您管理订阅(因为如果您手动订阅,您还应该unsubscribe
)。