Angular 8, Firebase Отображение пользователей на основе коллекции UID - PullRequest
0 голосов
/ 29 февраля 2020

Мне нужно немного помочь в этом. Пытался исследовать и делал несколько попыток, где я получаю либо последнюю коллекцию пользователей, либо первую, в любом случае я не могу вернуть / просмотреть все.

У меня есть, например, 4 UID, и мне нужно показать пользователям, что сопоставьте эти 4 UID из, скажем, 50 пользователей. Я попытался использовать this.db.list('users/', ref => ref.orderByChild('id').equalTo(<string>id.ids)).snapshotChanges(), но при этом возвращается только тот пользователь, который соответствует последнему значению / UID.

Есть ли шанс достичь этого каким-либо способом без потери производительности?

Спасибо

1 Ответ

0 голосов
/ 01 марта 2020

Потратив несколько часов, я наконец-то нашел решение и выполняю этот код для ngOnInit:

  this.auth.user.subscribe(user => {
  this.db.list('users/' + user.uid + '/friends').valueChanges().pipe(map(changes => {
    return changes.map(x => {
      return x;
    })
  })).subscribe(friends => {
    let test1 = [];
    let test2 = [];
    for (let i = 0; i < friends .length; i++) {
      this.db.list('users/', ref => ref.orderByChild('id').equalTo(<string>friends[i].ids)).snapshotChanges()
        .subscribe(x => {
        test1.push(x);
        test1.forEach(y => {
          y.forEach(z => {
            test1 = [];
            test2.push(z);
            this.friendsList$ = test2;
          })
        })
      });
    }
  });
});

На основе этих 4 идентификаторов, показанных на рисунке ниже, я получаю все профили пользователей со всеми данные, необходимые для каждого пользователя, для создания списка пользователей, с которыми я связан.

enter image description here

и в конце в шаблоне я использую friendsList $ в * ngFor l oop.

Примечание: Этот код можно реорганизовать и сделать лучше, это мое первое решение. После рефакторинга я отредактирую этот ответ. Это на тот случай, если у кого-то возникла такая же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...