response.json не является функцией. AngularFire

Итак, я создаю приложение с использованием AngularFire2. Оно находится в службе, но когда запускается поиск функции, он вызывает ошибку response. Json не является функцией. Firebase возвращает наблюдаемое, и я не уверен, почему этот фрагмент не работает.

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Article } from '../models/index';

  search(term: string): Observable<Article[]> {
    return this.af.database
      .list('/articles/', {
        query: {
          orderByChild: "title",
          equalTo: term,
          limitToFirst: 10
        }
      })
      .map(response => response.json().data as Article[]);
  }

person John Paul Balchan    schedule 30.03.2017    source источник


Ответы (1)


Наблюдаемый list AngularFire2 не генерирует объект ответа HTTP. Он генерирует массив анонимных объектов, представляющих элементы, соответствующие запросу.

Если Article - это интерфейс, вы можете удалить оператор map и привести сам наблюдаемый объект:

import { Observable } from 'rxjs/Observable';
import { Article } from '../models/index';

search(term: string): Observable<Article[]> {
  return this.af.database
    .list('/articles/', {
      query: {
        orderByChild: 'title',
        equalTo: term,
        limitToFirst: 10
      }
    }) as Observable<Article[]>;
}

Если Article является классом, вы должны использовать оператор map для создания фактических экземпляров Article (с использованием подходящего конструктора):

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Article } from '../models/index';

search(term: string): Observable<Article[]> {
  return this.af.database
    .list('/articles/', {
      query: {
        orderByChild: 'title',
        equalTo: term,
        limitToFirst: 10
      }
    })
    .map(list => list.map(item => new Article(item));
}
person cartant    schedule 30.03.2017