Angularfire2更新记录
我是angular的新手,我正在开发一个小型web应用程序 我已经成功地设置了angularfire 2,并成功地使用Push()创建了一个新的列表条目 假设我的列表(用户)由用户电子邮件和名字组成。只有电子邮件是通过Push方法添加的,我想通过添加名字来更新该记录 我参考了Angularfire2文档,并设法做到了这一点:Angularfire2更新记录,angular,firebase,firebase-realtime-database,angular5,angularfire2,Angular,Firebase,Firebase Realtime Database,Angular5,Angularfire2,我是angular的新手,我正在开发一个小型web应用程序 我已经成功地设置了angularfire 2,并成功地使用Push()创建了一个新的列表条目 假设我的列表(用户)由用户电子邮件和名字组成。只有电子邮件是通过Push方法添加的,我想通过添加名字来更新该记录 我参考了Angularfire2文档,并设法做到了这一点: usrEmail: string; usrData: AngularFireList<any>; usr: Observable<any>;
usrEmail: string;
usrData: AngularFireList<any>;
usr: Observable<any>;
constructor( private authService: AuthService, private afd: AngularFireDatabase) {
this.usrData = this.afd.list('/users')
// now get the current user
this.usr = this.usrData.snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});
}
usrEmail:string;
usrData:角度火工队;
usr:可观察;
构造函数(专用authService:authService,专用afd:AngularFireDatabase){
this.usrData=this.afd.list(“/users”)
//现在获取当前用户
this.usr=this.usrData.snapshotChanges().map(更改=>{
返回changes.map(c=>({key:c.payload.key,…c.payload.val()}));
});
}
我不确定如何通过usrEmail过滤列表,并获取更新记录的密钥
非常感谢为我指明正确方向的任何帮助。您使用的查询将获得所有
/users
而不仅仅是具有匹配电子邮件地址的单个用户
我假设您可以访问电子邮件地址,并且它被分配给变量userEmailAddress
this.usr = this.afd.list('/users', ref => ref
.orderByChild('usrEmail')
.equalTo(userEmailAddress)
)
.snapshotChanges()
.map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
})
.first()
.subscribe(snapshots => {
snapshots.forEach(snapshot => {
console.log('Snapshot Key: ', snapshot.key);
console.log('Snapshot Payload: ', snapshot.val());
});
});
snapshot.key的输出将是您试图获取的密钥
但是,在您的场景中,有更好的方法存储客户的电子邮件地址。您可以在数据库中创建包含用户id的路径,例如
我假设您可以通过authService访问uidthis.authService.uid
this.afd.object(`/users/${this.authService.uid}`).update({
email: userEmailAddress
});
用户的uid
将永远不会更改,并且它是该用户独有的,因此您可以使用它创建数据库路径,以便于访问。非常感谢您的快速响应。非常感谢,你建议的方法是一个更好的设计。一个简单的说明,我可以使用push()创建一个新路径吗?稍后将测试代码并标记为已应答:)Push用于生成唯一路径。如果您执行类似于this.afd.list(
/users/${this.authService.uid}).push({email:userEmailAddress})的操作代码>它会生成一个路径,比如“代码> /用户/ SOMUIDID/SAMEANDANMOPHIGKE/EMAIL <代码>,这是一个长路径,在路径的中间有<代码> SAMEANDANMOPUPKEY < /COD>,这使得解码很困难。然而,如果使用设置
或更新
,它将写入您指定的路径,而无需添加额外的键。路径应该是/users/someUid/email
,这要短得多。