我试图使搜索函数返回一个可观察的对象数组,以针对Angular 6中针对该对象的多个属性的搜索项进行匹配。 我的对象当前具有3个属性,并且使用http客户端,我只能搜索一个属性。 Object.name或object.id。我到目前为止在Angular网站上修改了英雄巡回教程。要将我的目标与英雄教程联系起来,我想通过id,name并最终通过其他属性来搜索英雄。 我目前有3个字符串数组,每个字符串数组都有对象名称,id和另一个属性。我还创建了一个通过连接字符串数组来创建对象数组的函数。 我不知道这是否是执行此任务的最佳方法,我最初是使用excel工作表并尝试使用其数据构建模拟数据库。有人告诉我将数据制作成json文件,并将其保存在资产文件夹中。
searchPaints(term: string): Observable<Paint[]> {
if (!term.trim()) {
// if not search term, return empty paint array.
return of([]);
}
return this.http.get<Paint[]>(`${this.paintsUrl}/?name=${term}`)
.pipe(
tap(_ => this.log(`found paints matching "${term}"`)),
catchError(this.handleError<Paint[]>('searchPaints', []))
);
}
这是代码示例,我可以将get请求修改为
this.http.get<Paint[]>(`${this.paintsUrl}/?id=${term}`)
我可以通过ID获得结果,但是paint对象最终将具有许多其他属性。
我希望它具有以下功能:如果我按任何属性进行搜索,它将在paint的每个属性中进行搜索,并返回合并的结果。
我一直在研究forkjoin,但是到目前为止我还没有任何功能。
答案 0 :(得分:0)
我过去通常处理此问题的方式是在数据库中使用OR查询。不确定由于某种原因这不是一个选择吗?
我会查询:
this.http.get(${this.paintsUrl}/?query=${term}
)
不确定所使用的数据库。 SQL
SELECT * FROM Paint WHERE Id LIKE '%@query%' OR Color LIKE '%@query%'
蒙哥
{ $or: [ { "Id": /.*query.*/i }, { "Color": /.*query.*/i } ] }