我一定是严重误解了 RxJs 和 AngularFirebase2 的某些内容,因为我无法弄清楚这个错误。
我有一个 firebase 列表,我正在使用服务中的函数进行查询,如下所示:
returnAuthor(id) {
this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); return data })
}
returnAuthor
中的 console.log(data)
生成正确的数据,但我的模板中的 {{ returnAuthor(id) }}
返回未定义
。在我的组件中运行 returnAuthor
也会返回 undefined
。
有人可以给我指出正确的方向吗?我需要订阅组件而不是服务吗?
最佳答案
您的方法返回未定义,因为您没有从函数返回结果。 要返回结果,您的函数将如下所示
returnAuthor(id) {
return this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); return data })
}
但是像这样返回将返回订阅而不是数据。如果您想要来自订阅的数据,您可以声明一个变量并将订阅返回的数据设置给它。像这样的事情
在你的类(class)
dataVariable;
returnAuthor(id) {
this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); this.dataVariable = data })
}
现在,订阅中可用的数据将传递到您可以使用的 dataVariable
上。
如果您想在数据到达时将其传递给另一个方法,您可以调用订阅中的方法。像这样的事情
returnAuthor(id) {
this.db.list('/flamelink/users', ref => ref.orderByChild('id').equalTo(id)).valueChanges().subscribe(data => { console.log(data); anotherMethod(data); })
}
关于javascript - angularfirebase2列表查询返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51834319/