angular - 在数据网格中搜索

标签 angular vmware-clarity

我正在使用清晰度数据网格,我希望能够根据搜索过滤器过滤整个网格内容。

我试图创建一个管道。该管道包含在 app.module 中。管道在第一次加载组件时被调用(并且什么都不应该发生),但由于某种原因,当我将一些东西放入我的时,什么也没有发生。不调用“userFilter”管道。

用户.component.html

<input type="text" id="search" placeholder="Search..." ([ngModel])="searchTerm">
...
<clr-dg-row *clrDgItems="let user of users | userFilter: searchTerm" [clrDgItem]="user" (click)="backupSelectedUser(user)">
  <clr-dg-cell>{{ user.username }}</clr-dg-cell>
  <clr-dg-cell>{{ user.name }}</clr-dg-cell>
  <clr-dg-cell>{{ user.firstName }}</clr-dg-cell>
</clr-dg-row>
...

搜索.pipe.ts

transform(items: any, term: any): any {
  if (term === undefined) {
    return items;
  }

  return items.filter(function (item) {
    for (const property in item) {
      if (item[property] === null) {
        continue;
      }
      if (item[property].toString().toLowerCase().includes(term.toLowerCase())) {
        return true;
      }
    }
    return false;
  });
}

更新:我在 ngModel 上打了一点错字。它应该是 [(ngModel)] 而不是!

最佳答案

我记得几个月前写了一个 plunker 来展示这个:https://plnkr.co/edit/59FZKya2Soa7Ofnlge3B?p=preview

根据您的描述,这正是您想要的。你不应该像现在在迭代器中那样使用管道,因为它会强制 Angular 为每次更改检测重新计算它们,这太重了。因此,推荐的解决方案是坚持使用 *clrDgItems="let user of users",并将 users 属性本身设置为过滤后的数组,这样您只需重新计算用户输入内容时的过滤结果。

关于angular - 在数据网格中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744518/

相关文章:

Angular 2 如何测试 *ngIf 显示/隐藏的内容

angular - 使用 VMWare Clarity Design 和 Angular2+ 隐藏可扩展数据网格上的插入符号列

css - 如何对齐清晰度数据网格中的文本

angular - 动态更改 Angular Material 垫网格列表中的列值

javascript - 即使在 angular2 的控制台中没有包字段,如何使过滤器工作

javascript - Angular 2 单例列表多窗口数据共享

javascript - Angular 6 : Real time data

数据网格 - 行详细信息全宽

css - 用全局样式表覆盖 clarity-ui.min.css

css - 换行符不适用于清晰度可扩展行数据网格