@angular/fire 7.4.0调用FieldValue.arrayUnion提示属性不存在报错
报错原因
@angular/fire@7.4.0 适配的是Firebase v9及以上版本的模块化SDK,你写的FieldValue.arrayUnion()是v8及更早版本的命名空间式调用写法,v9版本已经把这类字段操作方法改成了独立导出的函数,不再挂载在FieldValue类上,所以会提示属性不存在。
修复方法
- 替换导入方式,直接导入独立的
arrayUnion方法,不要从FieldValue类上调用方法:
// 从firestore模块直接导入arrayUnion,两种导入路径二选一即可 import { arrayUnion } from 'firebase/firestore'; // 从@angular/fire导出路径导入也可正常使用 // import { arrayUnion } from '@angular/fire/firestore';
- 修改更新逻辑,直接调用导入的
arrayUnion函数:
//Add Group in user's groups array addGroupToUserDoc(gid: string, userId: string) { return this.db.doc(`users/${userId}`).update({ groups: arrayUnion(gid) }); }
补充说明
- v9模块化SDK下所有Firestore字段操作方法都是独立导出的,包括常用的
arrayRemove(数组移除元素)、serverTimestamp(生成服务端时间戳)、increment(数值自增)、deleteField(删除字段),使用时都是直接导入对应函数调用即可,不需要挂载在任何类上。 - 不要混用v8命名空间写法和v9模块化写法,参考文档时注意区分版本对应的API形式,避免同类报错。
内容的提问来源于stack exchange,提问作者Sanghmitra Tamrakar
相关产品推荐
相关产品推荐

