
In this tutorial, I will teach you how to make Angular Material Select/Dropdown with Search. We will use NgxMatSelectSearch Angular component. Basically, it provides an input field for searching/filtering MatSelect options of the Angular Material library.
You can try the Angular 13 Material select/dropdown search input field widget online using the button given below. The complete TypeScript and HTML5 source code of this project is also given below.
Important Note: This project is meant as a temporary implementation of angular/components#5697. The goal is to have an implementation in the official Angular Material repository, once angular/components#7835 is merged.
Install ngx-mat-select-search in your project:
npm install ngx-mat-select-search
Import the NgxMatSelectSearchModule e.g. in your app.module.ts:
import { MatSelectModule } from '@angular/material';
import { NgxMatSelectSearchModule } from 'ngx-mat-select-search';
@NgModule({
imports: [
...
MatSelectModule,
NgxMatSelectSearchModule
],
})
export class AppModule {}Use the ngx-mat-select-search component inside a mat-select element by placing it inside a <mat-option> element:
<mat-form-field>
<mat-select [formControl]="bankCtrl" placeholder="Bank" #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><ngx-mat-select-search ngModel (ngModelChange)="filterMyOptions($event)">
<ngx-mat-select-search [formControl]="bankFilterCtrl"
placeholderLabel="Find bank..."
noEntriesFoundLabel="'no matching bank found'"></ngx-mat-select-search>Current release
Version 3.3.3
Version 1.8.0
The MatSelectSearchComponent implements the ControlValueAccessor interface. Furthermore, it provides the following inputs:
Inputs
/** Label of the search placeholder */ @Input() placeholderLabel = 'Suche';
/** Type of the search input field */ @Input() type = 'text';
/** Font-based icon used for displaying Close-Icon */ @Input() closeIcon = 'close';
/** Svg-based icon used for displaying Close-Icon. If set, closeIcon is overridden */ @Input() closeSvgIcon?: string;
/** Label to be shown when no entries are found. Set to null if no message should be shown. */ @Input() noEntriesFoundLabel = 'Keine Optionen gefunden';
/**
* Whether or not the search field should be cleared after the dropdown menu is closed.
* Useful for server-side filtering. See [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)
*/ @Input() clearSearchInput = true;
/** Whether to show the search-in-progress indicator */ @Input() searching = false;
/** Disables initial focusing of the input field */ @Input() disableInitialFocus = false;
/** Enable clear input on escape pressed */ @Input() enableClearOnEscapePressed = false;
/**
* Prevents home / end key being propagated to mat-select,
* allowing to move the cursor within the search input instead of navigating the options
*/ @Input() preventHomeEndKeyPropagation = false;
/** Disables scrolling to active options when option list changes. Useful for server-side search */ @Input() disableScrollToActiveOnOptionsChanged = false;
/** Adds 508 screen reader support for search box */ @Input() ariaLabel = 'dropdown search';
/** Whether to show Select All Checkbox (for mat-select[multi=true]) */ @Input() showToggleAllCheckbox = false;
/** select all checkbox checked state */ @Input() toggleAllCheckboxChecked = false;
/** select all checkbox indeterminate state */ @Input() toggleAllCheckboxIndeterminate = false;
/** Display a message in a tooltip on the toggle-all checkbox */ @Input() toggleAllCheckboxTooltipMessage = '';
/** Define the position of the tooltip on the toggle-all checkbox. */ @Input() toogleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';
/** Show/Hide the search clear button of the search input */ @Input() hideClearSearchButton = false;
/**
* Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).
* Defaults to false, so selected options are only restored while filtering is active.
*/ @Input() alwaysRestoreSelectedOptionsMulti = false;
/**
* Text that is appended to the currently active item label announced by screen readers, informing the user of the current index, value and total
* options.
* eg: Bank R (Germany) 1 of 6
*/ @Input() indexAndLengthScreenReaderText = ' of ';
/** Output emitter to send to parent component with the toggle all boolean */ @Output() toggleAll = new EventEmitter<boolean>();
If you want to add a searchable select dropdown in your Angular app then the above source code will be very helpful. Basically, we used the NgxMatSelectSearch Angular component to seach/filter data inside a dropdown whereas for designing we used Google Material design library.
If you have been searching for the right note-taking or knowledge management app, you have…
Looking for AnyType alternatives? You're not alone. AnyType has gained popularity as a privacy-focused, local-first…
Notion is a popular all-in-one workspace, but many users seek alternatives for different needs (free…
Logseq is a beloved tool in the personal knowledge management (PKM) community. It's free, open-source,…
Looking for a Webshare alternative? You're not alone. Webshare is a popular proxy service with…
Docker changed software development forever. It made containers accessible, gave developers a simple workflow, and…