Angularfire2 Обновить запись

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

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

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
1 983
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.info('Snapshot Key: ', snapshot.key);
    console.info('Snapshot Payload: ', snapshot.val());
  });
});

Вывод snapshot.key будет ключом, который вы пытаетесь получить.

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

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

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

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

Большое спасибо за оперативный ответ. Большое спасибо, предложенный вами метод намного лучше. одно быстрое пояснение, могу ли я использовать push () для создания нового пути? Через некоторое время проверим код и отметим как ответ :)

sheeni 08.05.2018 08:45

Push используется для создания уникального пути. Если вы сделаете что-то вроде this.afd.list( / users / $ {this.authService.uid} ).push({ email: userEmailAddress });, он сгенерирует путь типа /users/someUid/someRandomPushKey/email, который представляет собой длинный путь с someRandomPushKey в середине пути, что затрудняет декодирование. Если вы используете set или update, он будет записывать по указанному вами пути без добавления дополнительных ключей. Путь будет /users/someUid/email, который намного короче.

sketchthat 09.05.2018 01:13

Другие вопросы по теме