json - response.json 不是函数。 Angular 火

标签 json angular observable angularfire2

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

最佳答案

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

如果 Article 是一个接口(interface),您可以删除 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));
}

关于json - response.json 不是函数。 Angular 火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43109797/

相关文章:

angular - 无法在 Angular 项目中运行 Mocha 测试

dart - 在 Dart 中使用可观察对象进行 Angular2 变化检测

json - Angular 2 中带有 Observable 的 http 无法使用数据

node.js - 使用交叉应用程序识别前台应用程序

java - 从对象创建 Jackson ObjectNode

Angular 2 激活路线

Angular-2 Observable 不起作用

Angular:数据仅在订阅方法中可用,但在外部不可用

javascript - 显示具有多个图层的弹出窗口 - openlayers

java - Elasticsearch java 客户端搜索嵌套字段不起作用