Angular 6搜索功能

时间:2018-09-04 14:14:11

标签: angular rxjs observable angular-httpclient

我试图使搜索函数返回一个可观察的对象数组,以针对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,但是到目前为止我还没有任何功能。

1 个答案:

答案 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 } ] }