【问题标题】:Angularfire2 Update a RecordAngularfire2 更新记录
【发布时间】:2018-10-17 22:00:57
【问题描述】:

我是 Angular 的新手,我正在构建一个小型网络应用程序。

我已经成功设置了 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 过滤列表并获取更新记录的密钥。

非常感谢任何为我指明正确方向的帮助。

【问题讨论】:

    标签: angular firebase firebase-realtime-database angular5 angularfire2


    【解决方案1】:

    您使用的查询获取所有/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 访问 uid。 this.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 }); 之类的操作,它将生成类似/users/someUid/someRandomPushKey/email 的路径,这是一条长路径,路径中间有someRandomPushKey,使其成为难以解码。而如果您使用setupdate,它将写入您指定的路径,而无需添加额外的键。路径将是 /users/someUid/email,它要短得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多