我在角度使用firebase实时数据库 . 我试图从firebase服务器实时获取一些数据:(来自服务的代码)
getData(child){
return firebase.database().ref(child).on('value', (snapshot) => {
console.log(snapshot.val())
})
}
并订阅我的组件中的上述功能:
this.examinerService.getData('batches/names').subscribe(
(batches) => {
this.batches = batches.val();
}
)
这给了我错误:
Property 'subscribe' does not exist on type '(a: DataSnapshot, b?: string) => any'
我已经尝试使用 ref().once()
工作正常,但我想要实时行为 .
更新:目前我在我的组件中使用 database().ref().on('value', (snapshots) => { console.log(snapshots.val()); });
工作正常但我想在我的服务中进行并在我的组件中订阅它 . 有人告诉我,它不是一个可观察的,所以你可以知道如何制作一个可观察的并用它绑定快照 .
3 回答
函数
getData
正在返回传递的回调而不是Observable
,这正是代码所期待的 . 你可以修改这个函数,以便返回.subscribe()
,你可以.subscribe()
.假设我们的数据结构看起来像这样
对于名称,我们可能有一个看起来像这样的界面
然后我们有一个看起来像这样的服务
最后我们的组件看起来像这样
Angular使用websockets实时更新 . 我不确定,但我认为这可能是你正在寻找的行为 .
.subscribe()
不会工作,因为返回类型不是Observable
. 你在回调函数中获得DataSnapshot
. 尝试并在您的组件中