Поиск определенного c элемента в наблюдаемом массиве - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь найти наблюдаемое для элемента с определенным атрибутом c. например, для списка пользователей найдите пользователя с данным идентификатором пользователя. Вот соответствующие части моего component.ts:

import { Component, OnInit } from '@angular/core';
import { ContentService } from '../shared/services/content.service';
import { ActivatedRoute } from '@angular/router';
import { AngularFireModule } from '@angular/fire';
import { AngularFirestore, AngularFirestoreDocument  } from '@angular/fire/firestore';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-main',
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css']
})
export class MainComponent implements OnInit {
  main: Object;
  users: Observable<any[]>;
  
  constructor(private route: ActivatedRoute, private contentService: ContentService, private firestore: AngularFirestore, ) {}
  ngOnInit() {
    const pageData = this.route.snapshot.data['main'];
    this.main = this.contentService.pages[pageData];
      this.users = this.firestore.collection('users').valueChanges();
  }

  getOwner(id) {
    return this.users
      .map(users => users.find(user => user.uid.equals(id)));
  }

}

Вы можете видеть, что я пытался это исправление, используя карту , но я получаю сообщение об ошибке «Свойство 'карта' не существует по типу 'Observable '. "Любая помощь приветствуется!

Ответы [ 3 ]

0 голосов
/ 20 июня 2020

Думаю, вам не хватает pipe функции

return this.users.pipe(
      map(users => users.find(user => user.uid.equals(id)))
)
0 голосов
/ 20 июня 2020

Если вам нужно вернуть владельца, вы должны сделать что-то вроде этого:

  getOwner(id) {
    return this.firestore.collection('users').get()
      .map(users => users.find(user => user.uid.equals(id)));
  }

Если вам нужен наблюдаемый, возвращающий владельца, вы должны сделать что-то вроде этого:

owner$ = this.firestore.collection('users').valueChanges().pipe(
          map(users => users.find(user => user.uid.equals(id))));

И затем, когда вам понадобятся значения из этого наблюдаемого, подпишитесь на него: в шаблоне через asyn c pipe:

[owner]="owner$ | async"

или в классе компонента с:

owner$.subscribe(o => console.log(o))
0 голосов
/ 20 июня 2020

Попробуйте заменить этот синтаксис

export class MainComponent implements OnInit {
  main: Object;
  users: [];
  }
 getOwner(id): Observable<any> {
    return this.users
      .map(users => users.find(user => user.uid.equals(id)));
  }
...