Angularfire2 记录更新:如何为已创建的用户记录添加名字
解决AngularFire2更新用户记录添加名字的问题
嘿,刚接触Angular和AngularFire2对吧?别担心,更新Firebase里的用户记录其实很简单,我来帮你一步步搞定~
首先要明确:你用push()创建用户条目时,Firebase会自动生成一个唯一的key,要更新这条记录,关键就是拿到这个key,然后用update()方法添加名字字段(这个方法只会更新指定字段,不会覆盖原有数据,完美符合你的需求)。
下面分两种常见场景给你代码示例:
场景1:添加邮箱时直接保存key,随后更新名字
如果你在调用push()的时候就能拿到生成的key,那可以直接用它来更新:
// 先在组件里注入AngularFireDatabase constructor(private db: AngularFireDatabase) {} // 添加用户邮箱并更新名字的方法 addAndUpdateUser(email: string, name: string) { // 调用push()添加邮箱,返回该记录的引用 const newUserRef = this.db.list('users').push({ email: email }); // 从引用中获取唯一key const userId = newUserRef.key; // 用key定位到该记录,更新name字段 this.db.object(`users/${userId}`).update({ name: name }); }
场景2:没保存key,通过邮箱查询后更新名字
如果当时没保存key,也可以通过邮箱字段查询到对应的记录,再获取key进行更新:
import { take } from 'rxjs/operators'; // 记得导入take操作符,避免内存泄漏 // ... updateUserNameByEmail(targetEmail: string, newName: string) { // 按email字段查询匹配的用户记录 this.db.list('users', ref => ref.orderByChild('email').equalTo(targetEmail)) .snapshotChanges() .pipe(take(1)) // 只查询一次,避免持续订阅 .subscribe(actions => { // 遍历查询结果(如果邮箱唯一,这里只会有一条) actions.forEach(action => { const userId = action.key; // 获取记录的key // 更新该记录的name字段 this.db.object(`users/${userId}`).update({ name: newName }); }); }); }
关键知识点提醒
update()方法:只会修改你指定的字段,原有字段(比如你的email)会被保留,不会被覆盖。- 内存泄漏:用
snapshotChanges()订阅时,记得用take(1)或者在组件销毁时取消订阅,避免不必要的资源占用。
内容的提问来源于stack exchange,提问作者sheeni
相关产品推荐
相关产品推荐

