response.json不是一个函数。 AngularFire

时间:2017-03-30 06:07:47

标签: json angular observable angularfire2

所以我正在使用AngularFire2构建应用程序,这是在服务中,但是当函数搜索运行时,它调用错误响应.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[]);
  }

1 个答案:

答案 0 :(得分:3)

AngularFire2&#39; s list observable不会发出HTTP响应对象。它会发出一组匿名对象,表示与查询匹配的项目。

如果Article是一个界面,您可以删除map运算符并自行投射observable:

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));
}