Angularfire2 Обновить запись - PullRequest
0 голосов
/ 08 мая 2018

Я довольно новичок в 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 и получить ключ для обновления записи.

Любая помощь, указывающая мне правильное направление, очень ценится.

1 Ответ

0 голосов
/ 08 мая 2018

Используемый вами запрос получает все /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 будет ключом, который вы пытаетесь получить.

Однако в вашем сценарии есть лучший способ сохранить адрес электронной почты клиента. Вы можете создать путь, содержащий идентификатор пользователя в базе данных, например:

Я предполагаю, что у вас есть доступ к uid через authService. this.authService.uid

this.afd.object(`/users/${this.authService.uid}`).update({
  email: userEmailAddress
});

uid пользователя никогда не изменится, и он уникален для этого пользователя, поэтому вы можете создать с ним пути к базе данных для легкого доступа.

...