如何从Firebase实时数据库list()响应中获取叶子节点值?
AngularFire实时数据库list()获取叶子节点值的正确方式
你当前使用snapshotChanges()订阅列表时,得到的elements数组里的每一项是Action对象,其中的payload是Firebase的DataSnapshot实例,并非直接的字符串值——这就是直接访问payload会看到带_database、_delegate属性对象的原因,而JSON序列化时因DataSnapshot的特殊处理才显示成字符串。
要获取叶子节点的实际值,需要调用payload的val()方法:
db.list('/firebaseElements').snapshotChanges().subscribe(elements => { const els = elements.map(action => { return { key: action.key, value: action.payload.val() // 此处获取真正的字符串值 }; }); // 示例输出:[{key: "1", value: "element1"}, ...] });
如果只需要值不需要节点key,可简化为:
const values = elements.map(action => action.payload.val()); // 直接得到 ["element1", "element2", "element3"]
另外,旧文档提及的$value是针对valueChanges()方法返回对象的用法,snapshotChanges()偏向底层操作,需手动处理快照。若你只关心节点值,也可以直接用valueChanges(),它会直接返回数据值:
db.list('/firebaseElements').valueChanges().subscribe(values => { // values就是 ["element1", "element2", "element3"] });
内容的提问来源于stack exchange,提问作者ArtK
相关产品推荐
相关产品推荐

