Angular+Firebase实时数据库调用报DatabaseSnapshot无doc属性错误
问题原因
你混淆了 Firebase Realtime Database(实时数据库) 和 Cloud Firestore 的API调用规则:
- 你当前导入的
AngularFireDatabase对应实时数据库服务,返回的DatabaseSnapshot类型的payload下不存在doc属性,doc是Firestore专属的属性。
修复方案
直接把getMembers方法里的取值逻辑替换为实时数据库对应的语法即可:
- 取节点唯一key:用
a.payload.key - 取节点下的全量数据:用
a.payload.val()
修改后的完整代码如下:
getMembers() { let initialPayload = this.db.list("/members").snapshotChanges() .pipe(map(actions => actions.map(a => ({ key: a.payload.key, data: a.payload.val() }) ))); return initialPayload; }
补充说明
如果后续你切换到Cloud Firestore服务,才需要导入AngularFirestore,使用a.payload.doc.id、a.payload.doc.data()的写法,不要和实时数据库的API混用即可解决类型报错。
内容的提问来源于stack exchange,提问作者Ghadir
相关产品推荐
相关产品推荐

