我的 firebase
数据库中有以下数据结构:
我添加了一个 child_added
方法,它会在应用程序运行时从 firebase
返回所有条目,然后将它们显示在 HTML
上表。
我遇到的问题是,它没有为每个错误返回自动生成的 ID。
这是我的方法:
getAddedBugs(): Observable<any> {
return Observable.create(obs => {
this.bugsDbRef.on('child_added', bug => {
const newBug = bug.val() as Bug;
obs.next(newBug);
},
err => {
obs.throw(err)
});
});
}
类
Bug
如下所示:
export class Bug {
constructor(
public id: string,
public title: string,
public description: string,
public status: number,
public severity: number,
public createdBy: string,
public createdDate: number,
public updatedBy?: string,
public updatedDate?: number
) {}
}
那么问题是,我怎样才能让我的方法也包含自动生成的 ID,因为我需要这个 Id 来更新/删除等。
我用谷歌搜索了这个,不幸的是我没能找到任何关于这个的东西。
有人可以阐明我是如何处理这件事的吗?
最佳答案
与其将事件的快照值转换为 Bug
(这不是 Bug
;它只是一个 Object
),您应该创建一个Bug
实例使用快照中的信息。快照包含键(自动生成的 ID)和值:
getAddedBugs(): Observable<any> {
return Observable.create(obs => {
this.bugsDbRef.on('child_added',
snapshot => {
// The snapshot's value will be an Object, not a Bug instance.
const val = snapshot.val();
const bug = new Bug(
snapshot.key, // The auto generated ID.
val.title,
val.description,
... etc.
);
obs.next(bug);
},
err => {
obs.throw(err)
});
});
}
您还应该考虑返回一个在取消订阅时删除事件监听器的函数:
getAddedBugs(): Observable<any> {
return Observable.create(obs => {
const listener = snapshot => {
const val = snapshot.val();
const bug = new Bug(
snapshot.key,
val.title,
val.description,
... etc.
);
obs.next(bug);
}
this.bugsDbRef.on('child_added', listener, err => { obs.throw(err) });
return () => this.bugsDbRef.off('child_added', listener);
});
}
关于javascript - 调用 child_added 监听器时返回自动生成的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41438271/