Вызов функции Firebase в Angular - PullRequest
0 голосов
/ 06 июня 2018

Я сделал эту функцию:

  getAllUserLikedProperties(): AngularFirestoreCollection<any> {
    return this.afs.collection('users', ref =>
      ref.where('uid', '==', this._auth.currentUserId)
        .where('likedProp', '==', true)
    );
  }

, и я попытался назвать это следующим образом:

  ngOnInit() {
      this._property.getAllUserLikedProperties().subscribe(likedProp => {
        console.log(likedProp);
        this.likedProp = likedProp;
      });

    }

однако он возвращает эту ошибку:

ERROR TypeError: this._property.getAllUserLikedProperties is not a function

Кто-нибудь знает почему?И знаете, как мне это назвать?

1 Ответ

0 голосов
/ 07 июня 2018

Ваша сервисная функция getAllLikedProperties() не возвращает наблюдаемое, оно возвращает значение вашей отфильтрованной коллекции afs.

Измените свою функцию так, чтобы она возвращала наблюдаемое, и вы можете подписаться на нее, например:

getAllUserLikedProperties(): AngularFirestoreCollection<any> {

    const properties$: Subject<any> = new Subject<any>();
    properties$.next(this.afs.collection('users', ref =>
      ref.where('uid', '==', this._auth.currentUserId)
        .where('likedProp', '==', true)
    ));
   return properties$;
}

В качестве альтернативы, вы можете использовать оператор RxJs of для возврата наблюдаемого потока:

import { of } from 'rxjs';

getAllUserLikedProperties(): AngularFirestoreCollection<any> {
    return of(this.afs.collection('users', ref =>
      ref.where('uid', '==', this._auth.currentUserId)
        .where('likedProp', '==', true)
    ));
}

Или, вообще, забыть о подписке и просто сразу присвоить значение.

ngOnInit() {
    this.likedProp = this._property.getAllUserLikedProperties();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...