使用 Angular 材质按列过滤谓词表

2024-04-02

我想使用谓词过滤器按列过滤我的 mat-table 结果。我已经使用了一个简单的过滤器,但它过滤了所有列中的所有数据。我搜索类似的主题,但我不知道如何使用它。 我尝试对所有列重复我的代码,但不起作用。

请参阅下面的代码:

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
</mat-form-field>
<div class="example-container mat-elevation-z8">
    <div class="example-header">
        <div>
            <mat-table [dataSource]="dataSource" matSort>
                <ng-container matColumnDef="aa">
                    <mat-header-cell *matHeaderCellDef mat-sort-header>aa title</mat-header-cell>
                    <mat-cell *matCellDef="let user"> {{user.aa}} </mat-cell>
                </ng-container>
                <ng-container matColumnDef="bb">
                    <mat-header-cell *matHeaderCellDef mat-sort-header> bb tilte </mat-header-cell>
                    <mat-cell *matCellDef="let user"> {{user.bb}} </mat-cell>
                </ng-container>
                <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
                <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
            </mat-table>
            <mat-paginator [pageSizeOptions]="[5, 10, 25, 100]"></mat-paginator>
        </div>
    </div>
</div>

and my .ts :

export class MynewComponent implements OnInit {
    dataSource = new MatTableDataSource();
    displayedColumns = ['aa', 'bb'];
    @ViewChild(MatPaginator) paginator: MatPaginator;
    @ViewChild(MatSort) sort: MatSort;

    constructor(private materialService: MaterialService) {}

    ngOnInit() {
        this.materialService.getUser().subscribe(value =>{this.dataSource.data = value;});
        this.dataSource.paginator = this.paginator;
        this.dataSource.sort = this.sort;
    }

    applyFilter(filterValue: string) {
        filterValue = filterValue.trim(); // Remove whitespace
        filterValue = filterValue.toLowerCase(); // Datasource defaults to lowercase matches
        this.dataSource.filter = filterValue;
        if (this.dataSource.paginator) {
            this.dataSource.paginator.firstPage();
        }
    }
}

export class UserDataSource extends DataSource<any> {
    constructor(private materialService: MaterialService) {
        super();
    }

    connect(): Observable<MaterialModel[]> {
        return this.materialService.getUser();
    }

    disconnect() {}
}

HTML 还添加 7 个差异输入字段applyFilter将输入值和该列的键作为字符串传递

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'aa')" placeholder="Filter">
</mat-form-field>

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'bb')" placeholder="Filter">
</mat-form-field>

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'col3')" placeholder="Filter">
</mat-form-field>

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'col4')" placeholder="Filter">
</mat-form-field>

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'col5')" placeholder="Filter">
</mat-form-field>

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'col6')" placeholder="Filter">
</mat-form-field>

<mat-form-field>
  <input matInput (keyup)="applyFilter($event.target.value, 'col7')" placeholder="Filter">
</mat-form-field>

您可以根据您的设计要求找到其他编写 HTML 的方式。

成分

创建过滤器对象具有key: 列键 &value:过滤值

filterObj = {};
applyFilter(filterValue: string, key: string) {
    this.filterObj = {
        value: filterValue.trim().toLowerCase(),
        key: key
    }
    this.dataSource.filter = filterValue;
    if (this.dataSource.paginator) {
        this.dataSource.paginator.firstPage();
    }
}

update filterPredicate as:

this.dataSource.filterPredicate = (data, filter) => {
    if(data[this.filterObj['key']] && this.filterObj['key']) {
        return data[this.filterObj['key']].toLowerCase().includes(this.filterObj['value']);
    }
    return false;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Angular 材质按列过滤谓词表 的相关文章

  • 两个服务如何以双向方式相互通信?

    一种是通过事件 另一种是通过调用方法 我试图在我的应用程序中实现聚合模式 我有 AuthService 在这里我处理身份验证结果并发出事件 if auth this eAuth emit true else this eAuth emit
  • Angular 2 Observable 具有多个订阅者

    我有一个 Angular 2 服务 可以从 API 获取数据 该服务有 3 个订阅者 在组件中定义 每个订阅者都对数据执行其他操作 不同的图表 我注意到我正在向 API 发出三个 GET 请求 而我想要实现的是一个请求 并且订阅者将共享数据
  • 401 Unauthorized("detail":"未提供身份验证凭据。")

    我在后端使用 djoser 的身份验证 当我通过具有内容类型和授权标头的邮递员在 account me 发出获取请求时 我得到了正确的响应 但是当我尝试从我的角度客户端执行相同的请求时 我得到401 Unauthorized detail
  • mat-tab-group 不是 Angular 9 中的已知元素

    我正在使用 Angular 9 和 Angular Material 9 2 4 我正在尝试使用mat tab 组在我的 component html 中 但我不断收到错误 mat tab group is not a known elem
  • 如何向离子推送通知添加操作按钮?

    我想向离子推送通知添加一些操作按钮 我正在使用科尔多瓦pushv5 通知工作正常 但我不知道如何添加这些按钮 如何添加这些按钮 应在 POST 请求中添加操作按钮 registration ids my device id data tit
  • Webpack 在 Angular 的 ng 服务中的作用

    我是 Angular 的新手 想知道当我们为应用程序提供服务时 Webpack 在幕后扮演什么角色 在最初的印象中 我开始知道 webpack 是一个构建和打包工具 它将所有必需的 JS 文件分组到单独的包中 然而 我无法找到 webpac
  • Angular 2 - 突出显示更新的表格单元格

    如何在表中刷新改变其值的单元格 tr td product productName td td product price td tr 在组件中我有产品的输入 Input products Array
  • 跨延迟加载路由创建共享模块

    我正在构建一个 Angular 11 应用程序并尝试创建一个SharedModule 我正在使用延迟加载 并希望避免在延迟加载的路由中多次加载公共模块 我创建了一个共享模块并将其导入到我的AppModule 根据我的理解 这个共享模块应该在
  • Angular *ngFor 循环遍历数组的数组

    我有一个数组 其中包含其他数组 如下所示 array element A element B YES NO 我想使用 ngFor 循环遍历 HTML 表中的这个对象数组 table thead tr th th th COLUMN 1 th
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • 避免在 Angular 2+ 中嵌套订阅?

    我有2个端点 1 个端点来获取当前用户的日志 1 个端点来获取该用户的授权 实际上我使用 this user subscribe e gt this grants get e subscribe x gt console log x 但这是
  • 修剪日期格式 PrimeNG 日历 - 删除时间戳、角度反应形式

    我将以下内容推入我的反应形式 obj 中2016 01 01T00 00 00 000Z但我想要以下2016 01 01 有谁知道有一个内置函数可以实现上述目的 我已经搜索过文档here https www primefaces org p
  • 如何在 Angular 2 应用程序中使 DateAdapter 单例?

    我正在开发一个带有延迟加载模块的 Angular 7 应用程序 我也使用有角度的材料组件 我想在日期选择器组件中本地化并支持多个区域设置 当应用程序语言发生变化时 我想在整个应用程序中全局更改它 可以通过 DateAdapter setLo
  • Windows 10 中的 npm 安装错误( npm install -g angular-cli )

    node v v4 5 0 npm v 5 0 1 有人在 Windows 10 中安装 angular cli 时遇到过这种问题吗 请尝试以下操作 step 0 运行这个命令 npm uninstall g angular cli npm
  • 415 不支持的媒体类型; Angular2 到 API

    我是 Angular 2 的新手 我面临着一个无法找到解决方案的问题 当我尝试从 Angular 2 发布到 API 时 我得到 415 不支持的媒体类型 角度2代码 onSubmit value any console log value
  • 在 Angular 中获取当前路由路径名称的最简单方法是什么?

    我正在寻找一种获取当前路线的路径名称的好方法 这是我能找到的最简单的 this route snapshot firstChild url 0 path 有没有更好的办法 谢谢 谢谢大家的回答 这是我发现我必须做的 router event
  • Angular 5 - 在加载数据之前停止未定义对象的错误

    防止控制台中因仍未定义的对象而出现错误的最佳方法是什么 假设我有这个 name string constructor private data DataService this data name subscribe res gt this
  • 没有导出的成员/节点模块

    我刚刚开始使用 5 分钟快速入门找到的 Angular 2 Typescripthere https angular io docs ts latest quickstart html 我遇到了一个看起来很常见的问题 但可能有点不同 我遇到
  • Angular Material 7 多重选择 - 设置选定值

    我正在尝试设置多选下拉列表的选定值 如下所示 循环根据条件选择多个复选框并进行设置 document getElementsByTagName mat pseudo checkbox index classList add mat pseu
  • 如何转义角度 HttpParams?

    在 Angular 服务中 我使用 HttpParams 将字符串发送到服务 get phone string Observable

随机推荐

  • 在 TFS 描述字段中嵌入文本

    我有一个关于描述字段的 TFS 问题 目前 TFS 描述字段是一个空字段 用户可以在其中添加任何信息 是否可以嵌入某种类型的文本 示例 创建新错误时 TFS 描述字段为空 相反 我想在描述字段中填充以下内容 配置和日志 版本及环境 复制步骤
  • Scala 中的参数列表会直接支持元组解包吗?

    在 Haskell 中你可以这样写 x Int Int gt Int x p s p 在 Scala 中你可以这样写 def x a Int Int a 1 or def x a Int Int a match case p s gt p
  • Alamofire 自动刷新令牌并重试 iOS Swift 4 中的先前 API 调用

    现在我正在使用 Swift 4 开发 iOS 应用程序 这里我使用 Alamofire 来集成 API 调用 我需要集成正确的方法来自动刷新身份验证令牌并重试之前的 API 调用 成功登录后 我将存储身份验证令牌 因此 登录后 在每个 AP
  • 如何让一个 Perl 脚本查看另一个 Perl 脚本中的变量?

    我有一个越来越大的 Perl 脚本 因此我想将其分解为多个脚本 也就是说 我想取出一些大的哈希声明并将它们放入另一个文件中 如何使原始脚本能够查看和使用现在在其他脚本中声明的变量 这让我抓狂 因为我已经有一段时间没有使用 Perl 了 而且
  • 使 XmlReaderSettings CheckCharacters 适用于 xml 字符串

    我有一个来自 Adob e PDF AcroForms 的 xml 字符串 它显然允许命名以数字字符开头的表单字段 我正在尝试将此字符串解析为 XDocument XDocument xDocument XDocument Parse xm
  • 查找字符串中最后一次出现的子字符串,并将其替换

    所以我有一长串相同格式的字符串 我想找到最后一个 每个字符中的一个 并将其替换为 我尝试过使用 rfind 但我似乎无法正确利用它来做到这一点 这应该可以做到 old string this is going to have a full
  • 带有 NSTask 的沙箱

    我启用了沙箱并使用 sbin ping使用 NSTask task setLaunchPath sbin ping task setArguments NSArray arrayWithObjects c10 iPAddress nil 一
  • Qt 颜色选择器小部件?

    我有一个QDialog向用户提供一些选项供其选择的子类 这些选项之一是颜色 我见过QColorDialog https stackoverflow com a 1972272 2062384 我需要一些更简单的东西 这也是一个常规小部件 这
  • 尽管所有测试都通过,但 TeamCity NUnit 构建步骤失败

    我正在设置 TeamCity 来运行一些 NUnit 测试 TeamCity 报告所有测试均已通过 但报告构建失败 并显示错误消息 新构建状态为 NUnit 错误 build status text 深入查看构建日志 我可以看到加载测试中的
  • 带有 AngularJS 指令的类似 Google 的搜索框

    我正在编写一个应用程序 其 UI 方面几乎与 Google 完全相同 我到达登陆页面 我有一个搜索框 提交后会将您引导至结果页面 在这里 您有相同的搜索框和其他指令 您可以在其中切换模式 例如 网络 图像 目前我有 在登陆页面上 带有 ac
  • 循环遍历一个范围以创建嵌套数据树

    我需要创建一个零件号列表 其中显示用于创建第一零件的所有其他子零件 例如部分12345是通过组合构建的abc and def 我有一个顶级部分的列表 以及第二个列表 其中有两列 左侧显示顶级 右侧显示子部分 e g Top Level Pa
  • 如何在 Spring Boot 3 上运行 Swagger 3

    使用带有 Java17 和 Spring Boot 3 0 0 的全新 Spring Initialzr 以及 Springfox Swagger 3 的 pom xml 的额外补充 我一生都无法让 Swagger 页面工作 相反 我得到了
  • UItextView 阿拉伯文文本右对齐

    在 UItextView inputView 上使用我的自定义阿拉伯语键盘 我用阿拉伯语文本填充我的 textView 但无法使书面文本向右对齐 需要帮助将文本向右对齐 BOOL textViewShouldBeginEditing UIT
  • TestFlight Live、QuincyKit 和 Crashlytics 之间的比较

    我将在 AppStore 上启动我的应用程序 我想跟踪崩溃情况并尽快修复它们 如果可能的话 最好还收集一些有关用户活动和其他有用信息的附加信息 为此 我寻找了一些崩溃报告工具 我发现的最有趣的工具是 试飞直播 https testfligh
  • 我的锚链接不会从页面顶部开始

    我不确定发生了什么 我有两个页脚 一个页脚是侧边栏 另一个页脚是页面底部的常规页脚 我底部页脚中的锚标记链接到我的 关于 页面 将我带到页面底部而不是从顶部开始 而侧边栏页脚中的锚标记将我带到页面中间 加载时 其他锚链接也会将我带到页面的中
  • Android 清单文件中的 android:immersive 属性是什么?

    我正在为 Google Glass 开发一个应用程序 但我的活动遇到了问题 当我有 7 到 10 秒没有与他们互动时 他们就结束了 屏幕关闭后 我轻敲玻璃再次唤醒它 我的活动就会消失 我就可以开机了ok glass屏幕 我进行了很多搜索 但
  • NgxMatDatetimePicker 不可分配给 MatDatepickerBase 类型

    今天我使用创建了一个新的 Angular 项目角度 11 0 0 然后我安装了 angular material components datetime picker这是我的 package json 文件中读取的内容的一部分 angula
  • 如何传递对象参数来获取 Web api 中的方法?

    如何将对象参数传递给 get 方法 我搜索了很多 例如如何将参数传递给asp net web api get方法 https stackoverflow com questions 45766147 how to pass paramete
  • Insert 语句中的记录数 (Oracle)

    我想报告 Oracle 插入语句中插入的记录数 我是从语句插入的 因此我可以运行两次选择并进行计数 但我宁愿将其全部保留在一个语句中 有办法吗 在 PL SQL 中执行 INSERTSQL ROWCOUNT给出插入的行数 在 C 中执行 I
  • 使用 Angular 材质按列过滤谓词表

    我想使用谓词过滤器按列过滤我的 mat table 结果 我已经使用了一个简单的过滤器 但它过滤了所有列中的所有数据 我搜索类似的主题 但我不知道如何使用它 我尝试对所有列重复我的代码 但不起作用 请参阅下面的代码