Angular Firestore报错:Query类型不存在snapshotChanges属性的解决咨询
问题解答
1. 正确使用snapshotChanges()实现实时更新的方法
你出错的核心原因是:直接操作了原生Firestore的CollectionReference和Query对象,而snapshotChanges()是AngularFire封装的AngularFirestoreCollection才有的方法,原生Query没有这个API。
正确的做法是通过AngularFire的API构建查询,而非直接取.ref。示例代码如下:
// 用AngularFire的collection方法传入查询回调,构建带条件的集合 const filteredCollection = this.firestore.collection(this.path(), ref => ref.where(...conditions...) .where(...conditions...) .orderBy('time', 'desc') .limit(5) ); // 此时filteredCollection是AngularFirestoreCollection类型,可调用snapshotChanges() this.subscription = filteredCollection.snapshotChanges().subscribe(changes => { // 处理实时返回的快照数据,比如映射成需要的格式 const data = changes.map(action => { const docData = action.payload.doc.data(); const id = action.payload.doc.id; return { id, ...docData }; }); // 后续业务逻辑 });
这种方式会保持实时更新:当Firestore中符合查询条件的数据发生变化时,snapshotChanges()会自动推送新的快照。
2. 升级Firestore是否可行?
升级不是解决当前问题的必要方案——你的代码写法错误才导致了报错,修正写法即可在当前版本下正常运行。
如果确实考虑升级,是可行的,但需要注意版本匹配规则:
- 你当前用的Angular 9.1.13对应
@angular/fire6.x版本,firebase8.x是兼容的 - 若要升级到
@angular/fire7+,需要同步将Angular升级到12及以上,同时firebase要升级到9+(模块化API) - 升级到更高版本(如
@angular/fire8+)需要Angular 14及以上,同样依赖firebase 9+
升级后需要适配Firebase 9的模块化写法,比如引入getFirestore、collection等函数,而非之前的命名空间方式,迁移成本视项目大小而定。
内容的提问来源于stack exchange,提问作者jessiepinkman
相关产品推荐
相关产品推荐

