如何解决如何从Firebase实时数据库中获取单个项目?
我有一个组件和一项服务,可以一起从Firebase实时数据库中检索项目。
实时数据库存储人员及其名字(fname)和姓氏(lname)。
从我的组件中,从URL中检索“ id”,这是firebase中的唯一ID。
然后,我的编辑组件将服务引用到getSingleItem(this.id)。
这是ts文件的一部分:
constructor(
private es: Service
){ }
ngOnInit() {
// This code graps the "id" from the URL
this.sub = this.route.params.subscribe(params => {
this.id = params["id"];
});
this.item = this.es.getSingleItem(this.id);
console.log(this.item); //returns strange object
console.log(this.item.fname);// shows as undefined.
console.log(this.item.lname);//shows as undefined
this.editForm = this.fb.group({
fname: [null],//cant get this.item.fname (comes as undefined)
lname: [null] //cant get this.item.fname (comes as undefined)
});
然后在我的服务中,getSingleItem()看起来像这样:
constructor(
private fdb: AngularFireDatabase
){ }
getSingleItem(id: string) {
const itemPath = `people/${id}`;
this.item = this.fdb.list(itemPath);
return this.item
}
但是回到组件中,当我console.log(this.item)时,它返回一个奇怪的对象,看起来像这样:
{query: Reference,update: ƒ,set: ƒ,push: ƒ,remove: ƒ, …}
没有希望看到的实际数据的痕迹。
当我尝试执行console.log(this.item.fname)
或console.log(this.item.lname)
时,它是未定义的。
如何正确从数据库中检索项目?
解决方法
您需要订阅this.fdb.list(itemPath)
返回的监听器。
例如:
this.fdb.list(itemPath).valueChanges((value) => console.log(value));
或者如果您同时需要文档ID和值:
this.fdb.list(itemPath).snapshotChanges((doc) => console.log(doc.id,doc.data()));
由于您正在观察单个文档,因此您可能还需要使用doc
而不是list
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。