如何在 Angular 中为嵌套的 JSON 对象使用搜索过滤器?

Posted

技术标签:

【中文标题】如何在 Angular 中为嵌套的 JSON 对象使用搜索过滤器?【英文标题】:How to use search filter in Angular for nested JSON object? 【发布时间】:2019-10-04 09:16:37 【问题描述】:

我正在从我的猫鼬中获取数据以显示在我的 html 表格上。我可以正常过滤 JSON 对象,但无法过滤嵌套的 JSON 对象?

我已经使用“npm i ng2-search-filter --save”来导入过滤管道,但这仅适用于第一级。不对嵌套的 JSON 对象进行过滤。

我的 JSON 对象是:


    packageName:test,
    packagePrice:200,
    userid:
        userName:John,
        userAge: 27
    


     <input type="text" class="form-control" [(ngModel)]="searchtext" 
     placeholder="Search">

      <table class="table table-hover">
      <thead>
        <tr>
          <th scope="col">Package Name</th>
          <th scope="col">Package Price</th>
          <th scope="col">Customer Name</th>
          <th scope="col">Customer Age</th>
        </tr>
      </thead>
      <tbody *ngFor="let use of user | filter:searchtext">
        <tr class="table-active">
          <td> use.packageName</td>
          <td>use.packagePrice</td>
          <td>use.userid.userName</td>
          <td>use.userid.userAge</td>       
        </tr>
      </tbody>
    </table>

当我在文本框中输入 packageName 和 packagPrice 进行搜索过滤时,它会过滤掉并显示正确的结果,但在 userName 和 userAge 上它不起作用。 请帮忙。 谢谢。

【问题讨论】:

现在这个功能在ng-search-filter的最新版本中可用 @PrashantPimpale 尝试将其粘贴到我的 node_module 中,但没有用 你使用了哪个命令? @PrashantPimpale 以前我使用这个命令 ng2-search-filter 安装,然后我只是用来自github.com/solodynamo/ng2-search-filter/releases/tag/0.4.9这个链接的 rar 文件替换了 ng2-search-filter 的现有 node_module 文件/跨度> @PrashantPimpale 这是我的错误,我安装了错误版本的软件包,这导致了问题。我安装了最新的现在它工作正常。非常感谢:D 【参考方案1】:

试试下面的:-

function getResult(filterBy, objList) 
return objList.hightlights.filter(function(obj) 
return obj.queries.some(function(item)
 return item.indexOf(filterBy) >= 0;
);
);

【讨论】:

我应该把这个粘贴到哪里? 您应该根据您的代码进行编辑,这是您应该根据您的要求编辑的一种示例 @Shubham 这行不通!他正在使用第三方库ng2-search-filter【参考方案2】:

您可以为此使用custom search pipe

我在Stackblitz上创建了演示

searchPipe.ts

transform(value: any, searchText?: any): any 
    if(!value) return [];
    if(!searchText) return value;
    searchText = searchText.toLowerCase();
    return value.filter( it => 
      return it.packageName.toLowerCase().includes(searchText) || it.packagePrice.toString().includes(searchText) || (it.userid &&  it.userid.userAge.toString().includes(searchText) || it.userid.userName.toLowerCase().includes(searchText));
    );

component.html

<tr class="table-active" *ngFor="let use of user | search:searchtext">
    <td> use.packageName</td>
    <td>use.packagePrice</td>
    <td>use.userid.userName</td>
    <td>use.userid.userAge</td>       
</tr>

【讨论】:

【参考方案3】:

我通过安装最新版本 ng2 search filter 解决了这个问题。

运行以下命令:

npm i ng2-search-filter@0.5.1

【讨论】:

以上是关于如何在 Angular 中为嵌套的 JSON 对象使用搜索过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Angular HTTP Post 请求,Payload 嵌套在 JSON 对象中

在angular7中读取复杂的嵌套json对象数组

如何使用 angular2 ngFor 深度嵌套的 json 值

如何为来自 SpringBoot 后端代码的嵌套 JSON 响应在 angular8(TypeScript) 或更高版本中定义模型类

如何在 Angular 2 的 TypeScript 中映射嵌套的 Json

如何在 Angular 类中表示嵌套的 JSON?