我试图使一个搜索函数返回一个可观察对象数组,用于Angular 6中搜索项的匹配,对象的多个属性。我的对象目前有3个属性,使用http客户端,我只能搜索一个属性。 Object.name或object.id。我在角网站上修改了英雄巡回教程。为了将我的目标与英雄教程联系起来,我想通过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,但到目前为止我还没有得到任何功能。
我过去通常处理这些东西的方式是在数据库中使用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 } ] }