首页 > 解决方案 > Angular 6 搜索功能

问题描述

我正在尝试创建一个搜索函数来返回一个可观察的对象数组,以匹配 Angular 6 中的搜索词,针对对象的多个属性。我的对象目前有 3 个属性,使用 http 客户端,我只能搜索一个属性。Object.name 或 object.id。我在 Angular 网站上修改了英雄之旅教程。为了将我的目标与英雄教程联系起来,我想通过 id、name 并最终通过其他属性来搜索英雄。我目前有 3 个字符串数组,每个数组都有对象名称、id 和另一个属性。我还创建了一个函数,通过加入字符串数组来创建对象数组。我不知道这是否是完成这项任务的最佳方式,我最初正在使用 excel 工作表并尝试使用其数据构建一个模拟数据库。

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', []))
    );
  }

这是代码示例,我可以将获取请求修改为

this.http.get<Paint[]>(`${this.paintsUrl}/?id=${term}`)

而且我可以通过 ID 获得结果,但是绘画对象最终将具有许多其他属性。

我希望它的功能是,如果我按任何属性进行搜索,它将在paint的每个属性中进行搜索,并返回组合结果。

我一直在探索 forkjoin,但到目前为止我还没有得到任何功能。

标签: angularrxjsobservableangular-httpclient

解决方案


我过去通常处理这些东西的方式是在数据库中使用 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 } ] }

推荐阅读