You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular表格搜索框开发:支持字符串、数字及混合字符过滤

Angular 表格多类型内容通用搜索管道实现

核心思路

要适配纯字符串、数字及带符号混合字符串的搜索,关键是对搜索关键词和目标字段值做标准化统一处理,消除大小写、特殊符号的干扰,再执行模糊匹配。

实现步骤

1. 创建搜索管道

通过Angular CLI快速生成管道:

ng generate pipe search-filter

2. 编写管道逻辑

修改search-filter.pipe.ts文件,实现支持多字段、多类型的过滤逻辑:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'searchFilter'
})
export class SearchFilterPipe implements PipeTransform {

  transform(items: any[], searchTerm: string, targetFields: string[]): any[] {
    // 空值判断:无数据/无搜索词/无目标字段时直接返回原数组
    if (!items?.length || !searchTerm?.trim() || !targetFields?.length) {
      return items || [];
    }

    // 标准化搜索词:转小写,移除所有非字母数字符号(按需调整)
    const processedSearchTerm = searchTerm.trim().toLowerCase().replace(/[^a-zA-Z0-9]/g, '');

    return items.filter(item => {
      // 遍历所有需要搜索的字段,只要有一个字段匹配就保留当前项
      return targetFields.some(field => {
        const fieldValue = item[field];
        if (fieldValue == null) return false;

        // 标准化字段值:转小写,移除非字母数字符号
        const processedFieldValue = fieldValue.toString().toLowerCase().replace(/[^a-zA-Z0-9]/g, '');
        return processedFieldValue.includes(processedSearchTerm);
      });
    });
  }
}

3. 在模板中使用管道

假设组件内有表格数据tableData,搜索输入框绑定searchKeyword,需要搜索code和productName两个字段:

<input type="text" [(ngModel)]="searchKeyword" placeholder="搜索编码/产品名...">

<table>
  <thead>
    <tr>
      <th>编码</th>
      <th>产品名称</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let row of tableData | searchFilter: searchKeyword: ['code', 'productName']">
      <td>{{ row.code }}</td>
      <td>{{ row.productName }}</td>
    </tr>
  </tbody>
</table>

可选调整

  • 如果需要保留特殊符号的精确匹配(比如必须输入XYZ-001才能匹配),只需移除代码中的replace(/[^a-zA-Z0-9]/g, '')部分,只保留大小写转换即可:
    const processedSearchTerm = searchTerm.trim().toLowerCase();
    const processedFieldValue = fieldValue.toString().toLowerCase();
    
  • 若要支持数字的精准匹配(比如搜1不匹配001),可单独对数字类型字段做额外判断,比如在some方法内添加:
    if (typeof fieldValue === 'number') {
      return fieldValue.toString() === searchTerm.trim();
    }
    

内容的提问来源于stack exchange,提问作者Ritik Rajvanshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:22:08