angular - 在进行 http 调用时将搜索过滤器添加到 observable
问题描述
我的json如下:
[
{
"name": "one",
"address": "1 Street"
},
{
"name": "two",
"address": "2 Street"
},
{
"name": "three",
"address": "3 Street"
},
{
"name": "four",
"address": "4 Street"
},
{
"name": "five",
"address": "5 Street"
}
]
如何按上面name
传递给 getCompanies 的变量进行过滤name
?
public getCompanies(name): Observable<any> {
return Observable.create((observer: Observer) => {
this.http.get(this.companyApiUrl)
.subscribe(data => {
observer.next(data)
observer.complete()
}, err => observer.error(err))
})
}
解决方案
无需将 包装在http.get
中Observable
,因为它已经返回了Observable
。相反,您可以使用map
运算符来转换响应,并使用数组filter
函数来查找name
属性与传入的项匹配的项。
请注意下面的代码使用 rxjs 6
import { map } from 'rxjs/operators';
public getCompanies(searchTerm): Observable<any> {
return this.http.get(this.companyApiUrl).pipe(
map((arr) => arr.filter(item => !searchTerm || item.name && item.name.indexOf(searchTerm) !== -1))
)
}
推荐阅读
- r - 添加仅在 1:200 之间为奇数的新列
- java - 试图创建一个密码。在我修复了输入字段的错误后,我遇到了变量无法解析的问题
- reactjs - 从带有钩子的标签中获取值反应
- azure-data-factory - 从定义的层次结构中的映射数据流输出文件很慢
- java - 迭代一个链表
- javascript - 如何创建条件语句为每个 ID 动态创建唯一按钮?
- python - 如何在 python 中将日志发送到 syslog?
- php - 创建并保存 csv 到 Laravel 中的存储
- unity3d - In Unity, how can I make a mesh a "portal" or cut-out that reveals an underlying image
- matlab - 如何绘制 fminsearch 遵循的轨迹?