所以我正在使用 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/