Project Icon

ngx-mat-select-search

为 Angular Material Select 增添搜索功能

NgxMatSelectSearch 为 Angular Material Select 组件增添搜索功能,支持单多选模式,易于集成。它优化了大型选项列表的使用体验,是 Angular Material 官方实现前的实用解决方案。该开源库显著提升了选项筛选和定位效率,为开发者提供了灵活且高效的选择组件增强工具。

NgxMatSelectSearch

https://github.com/bithost-gmbh/ngx-mat-select-search

npm 版本 npm 总下载量 npm 月下载量 CircleCI 捐赠

它有什么作用?

这是一个Angular组件,为Angular Material库的MatSelect选项提供一个输入字段用于搜索/过滤。

示例

试一试

在以下链接可以看到实际效果:

重要提示:本项目是https://github.com/angular/material2/issues/5697的临时实现。 最终目标是在官方Angular Material仓库中实现,将创建一个新的PR。

贡献

欢迎贡献,请开启一个issue,最好提交一个pull request。

支持开发

我们致力于通过不断改进NgxMatSelectSearch并快速响应错误报告来提供最佳服务。我们完全免费提供这些服务。 如果您觉得这个库对您有用,为您和您的业务节省了宝贵的时间,请考虑捐赠以支持其维护和进一步开发。

PayPal

财务支持者

非常感谢我们的财务支持者!

协作者

贡献者

非常感谢我们所有的社区贡献者!

## 如何使用?

在您的项目中安装 ngx-mat-select-search

npm install ngx-mat-select-search

在您的 app.module.ts 中导入 NgxMatSelectSearchModule

import { MatSelectModule } from '@angular/material';
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';

@NgModule({
  imports: [
    ...
    MatSelectModule,
    NgxMatSelectSearchModule
  ],
})
export class AppModule {}

通过将 ngx-mat-select-search 组件放置在 <mat-option> 元素内,在 mat-select 元素中使用它:

<mat-form-field>
  <mat-select [formControl]="bankCtrl" placeholder="银行" #singleSelect>
    <mat-option>
      <ngx-mat-select-search [formControl]="bankFilterCtrl"></ngx-mat-select-search>
    </mat-option>
    <mat-option *ngFor="let bank of filteredBanks | async" [value]="bank">
      {{bank.name}}
    </mat-option>
  </mat-select>
</mat-form-field>

查看 https://github.com/bithost-gmbh/ngx-mat-select-search/tree/master/src/app/examples 中的示例,了解如何连接 ngx-mat-select-search 并过滤可用选项。 或者查看 https://github.com/bithost-gmbh/ngx-mat-select-search-example 以在独立应用中查看它。

模板驱动表单

您也可以在模板驱动表单中使用它,如下所示:

<ngx-mat-select-search ngModel (ngModelChange)="filterMyOptions($event)">

标签

要更改标签,请使用 API 部分中指定的输入,如下所示:

<ngx-mat-select-search [formControl]="bankFilterCtrl" 
                       placeholderLabel="查找银行..." 
                       noEntriesFoundLabel="未找到匹配的银行"></ngx-mat-select-search>

要使用 i18n API 进行标签翻译,请添加相应的 i18n-... 属性:

<ngx-mat-select-search [formControl]="bankFilterCtrl" 
                       placeholderLabel="查找银行..." 
                       i18n-placeholderLabel
                       noEntriesFoundLabel="未找到匹配的银行"
                       i18n-noEntriesFoundLabel></ngx-mat-select-search>

兼容性

当前版本

  • @angular/core: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0
  • @angular/material: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0MatSelectModule (@angular/material/select)

版本 6.0.0

  • @angular/core: ^15.0.0
  • @angular/material: ^15.0.0MatLegacySelectModule (@angular/material/legacy-select)

版本 5.0.0

  • @angular/core: ^12.0.0 || ^13.0.0 || ^14.0.0
  • @angular/material: ^12.0.0 || ^13.0.0 || ^14.0.0

版本 3.3.3

  • @angular/core: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0
  • @angular/material: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0

版本 1.8.0

  • @angular/core: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
  • @angular/material: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0

API

MatSelectSearchComponent 实现了 ControlValueAccessor 接口。 此外,它还提供以下输入:

输入

  /** 搜索占位符的标签 */
  @Input() placeholderLabel = '搜索';

  /** 搜索输入字段的类型 */
  @Input() type = 'text';

  /** 用于显示关闭图标的基于字体的图标 */
  @Input() closeIcon = 'close';

  /** 用于显示关闭图标的基于SVG的图标。如果设置,将覆盖closeIcon */
  @Input() closeSvgIcon?: string;

/** 当未找到条目时显示的标签。如果不应显示消息,则设置为 null。 */ @Input() noEntriesFoundLabel = '未找到选项';

/**

  • 下拉菜单关闭后是否应清除搜索字段。
  • 对服务器端过滤很有用。参见 #3 */ @Input() clearSearchInput = true;

/** 是否显示搜索进行中的指示器 */ @Input() searching = false;

/** 禁用输入字段的初始聚焦 */ @Input() disableInitialFocus = false;

/** 启用按 Esc 键清除输入 */ @Input() enableClearOnEscapePressed = false;

/**

  • 防止 Home / End 键传播到 mat-select,
  • 允许在搜索输入内移动光标,而不是导航选项 */ @Input() preventHomeEndKeyPropagation = false;

/** 当选项列表变化时禁用滚动到活动选项。对服务器端搜索很有用 */ @Input() disableScrollToActiveOnOptionsChanged = false;

/** 为搜索框添加 508 屏幕阅读器支持 */ @Input() ariaLabel = '下拉搜索';

/** 是否显示全选复选框(适用于 mat-select[multi=true]) */ @Input() showToggleAllCheckbox = false;

/** 全选复选框选中状态 */ @Input() toggleAllCheckboxChecked = false;

/** 全选复选框不确定状态 */ @Input() toggleAllCheckboxIndeterminate = false;

/** 在全选复选框的工具提示中显示消息 */ @Input() toggleAllCheckboxTooltipMessage = '';

/** 定义全选复选框工具提示的位置 */ @Input() toggleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';

/** 显示/隐藏搜索输入的清除按钮 */ @Input() hideClearSearchButton = false;

/**

  • 在多选模式下始终在 selectionChange 时恢复选中的选项(例如用于懒加载/无限滚动)。
  • 默认为 false,因此只在过滤活动时恢复选中的选项。 */ @Input() alwaysRestoreSelectedOptionsMulti = false;

/** 输出事件发射器,用于向父组件发送全选布尔值 */ @Output() toggleAll = new EventEmitter();


#### 自定义清除图标
为了自定义搜索图标,将 `ngxMatSelectSearchClear` 添加到您的自定义清除项(一个 `mat-icon` 或任何其他元素)并将其放置在 `ngx-mat-select-search` 组件内:
```html
<ngx-mat-select-search>
   <mat-icon ngxMatSelectSearchClear>delete</mat-icon>
</ngx-mat-select-search>

如果只需要更改图标,可以使用 closeIconcloseSvgIcon 输入。

自定义未找到条目元素

为了自定义未找到条目元素,将 ngxMatSelectNoEntriesFound 添加到您的自定义项(一个 mat-iconspanbutton 或任何其他元素)并将其放置在 ngx-mat-select-search 组件内:

<ngx-mat-select-search>
  <span ngxMatSelectNoEntriesFound>
    未找到条目
    <button mat-button color="primary">
      添加 <mat-icon>add</mat-icon>
    </button>
</span>
</ngx-mat-select-search>

自定义内容

带有 CSS 类 mat-select-search-custom-header-content 的自定义内容可以如下嵌入:

<ngx-mat-select-search>
   <div class="mat-select-search-custom-header-content">特殊内容</div>
</ngx-mat-select-search>

全局默认选项

通过提供 MAT_SELECTSEARCH_DEFAULT_OPTIONS 注入令牌,可以全局设置 MatSelectSearchComponent 的多个 @Input() 属性的默认值。 请参阅 MatSelectSearchComponent 中相应 @Input() 属性的文档。

示例:

import { MAT_SELECTSEARCH_DEFAULT_OPTIONS, MatSelectSearchOptions } from 'ngx-mat-select-search';

@NgModule({
  ...
  providers: [
    {
      provide: MAT_SELECTSEARCH_DEFAULT_OPTIONS,
      useValue: <MatSelectSearchOptions>{
        closeIcon: 'delete',
        noEntriesFoundLabel: '未找到选项',
      }
    }
  ]
})
class AppModule {}

已知问题

  • 当打开选项面板并且面板位于屏幕边缘时,当前选中的选项可能被隐藏在搜索输入字段下方。

开发

本项目使用 Angular CLI 版本 1.7.1 生成。

开发服务器

运行 ng serve 启动开发服务器。导航到 http://localhost:4200/。如果您更改任何源文件,应用程序将自动重新加载。

构建

运行 ng build 构建项目。构建产物将存储在 dist/ 目录中。使用 -prod 标志进行生产构建。

库构建 / NPM 包

运行 npm run build-lib 构建库并生成 NPM 包。 构建产物将存储在 dist-lib/ 文件夹中。

运行单元测试

运行 npm run test 通过 Karma 执行单元测试。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号