【问题标题】:Angular 6 search functionalityAngular 6 搜索功能
【发布时间】:2018-09-04 14:14:11
【问题描述】:

我正在尝试创建一个搜索函数来返回一个可观察的对象数组,以匹配 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的每个属性中进行搜索,并返回组合结果。

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

【问题讨论】:

  • 我认为如果你能给我们一些示例代码会有所帮助!一般来说,我认为您只需发送一个搜索词,然后对对象本身进行 or 搜索。除非您希望使用 3 个不同的文本字段来专门搜索每个对象属性?同样,一些示例代码可以帮助我们更轻松地回答您的问题!
  • 已编辑以包含代码

标签: angular rxjs observable angular-httpclient


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2019-04-21
    • 2017-08-05
    • 2015-04-06
    相关资源
    最近更新 更多