我对角度很新,我正在建立一个小型网络应用程序。
我已设法设置angularfire 2并成功设法使用Push()创建新的列表条目。
假设我的列表(用户)包含用户电子邮件和名字。只有通过Push方法添加电子邮件,我想通过添加名字来更新该记录。
我提到了Angularfire2文档,并设法做到这一点:
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 过滤列表并获取更新记录的密钥。
非常感谢任何帮助我指向正确方向的帮助。
答案 0 :(得分:0)
您使用的查询获得的所有/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
的输出将是您尝试获取的密钥。
但是在您的方案中,有一种更好的方式来存储客户的电子邮件地址。您可以在数据库中创建包含user-id的路径,例如;
我假设您可以通过authService访问uid。 this.authService.uid
this.afd.object(`/users/${this.authService.uid}`).update({
email: userEmailAddress
});
用户的uid
永远不会改变,并且对于该用户来说是唯一的,因此您可以使用它创建数据库路径以便于访问。