Filtering

To enable the filtering functionality, set the filterable property to true.

Basic Configuration

On every user modification of the input value, the ComboBox triggers a filterChange event. The event argument contains the typed string value that you can use to filter the source.

Example
View Source
Edit In Stackblitz  
Change Theme:

To filter the data after a delay, use a similar implementation. You can toggle the loading property and provide the user with a visual indication of the filtering process.

import { AfterViewInit, Component, ViewChild } from '@angular/core';
import { Observable, BehaviorSubject, from } from 'rxjs';
import { delay, switchMap, map, tap } from 'rxjs/operators';

@Component({
  selector: 'my-app',
  template: `
    <kendo-combobox
        #list
        [data]="data"
        [filterable]="true"
        textField="text"
        valueField="value"
    >
    </kendo-combobox>
  `
})
export class AppComponent implements AfterViewInit {
    @ViewChild('list') list;

    public source: Array<{ text: string, value: number }> = [
        { text: 'Small', value: 1 },
        { text: 'Medium', value: 2 },
        { text: 'Large', value: 3 }
    ];

    public data: Array<{ text: string, value: number }>;

    constructor() {
        this.data = this.source.slice();
    }

    ngAfterViewInit() {
      const contains = value => s => s.text.toLowerCase().indexOf(value.toLowerCase()) !== -1;

      this.list.filterChange.asObservable().pipe(
            switchMap(value => from([this.source]).pipe(
                tap(() => this.list.loading = true),
                delay(1000),
                map((data) => data.filter(contains(value)))
            ))
        )
        .subscribe(x => {
            this.data = x;
            this.list.loading = false;
        });
    }

}

Server-Side Filtering

The following example demonstrates how to use the filter value to create the appropriate query string, required for filtering the data on the server.

Minimum Filter Length

The following example demonstrates how to update the data and open the drop-down list of the ComboBox only after typing a minimum number of characters.

import { Component, ViewChild } from '@angular/core';
import { ComboBoxComponent } from '@progress/kendo-angular-dropdowns';

@Component({
  selector: 'my-app',
  template: `
    <p>Focus the ComboBox and type minimum 3 characters, e.g. "sma"</p>
    <kendo-combobox
        #combo
        [data]="data"
        [textField]="'text'"
        [valueField]="'value'"
        [filterable]="true"
        (filterChange)="handleFilter($event)"
    >
    </kendo-combobox>
  `
})
class AppComponent {
    @ViewChild('combo') public combo: ComboBoxComponent;

    public source: Array<{ text: string, value: number }> = [
        { text: "Small", value: 1 },
        { text: "Medium", value: 2 },
        { text: "Large", value: 3 }
    ];

    public data: Array<{ text: string, value: number }>;

    constructor() {
        this.data = this.source.slice();
    }

    handleFilter(value) {
        if (value.length >= 3) {
            this.data = this.source.filter((s) => s.text.toLowerCase().indexOf(value.toLowerCase()) !== -1);
        } else {
            this.combo.toggle(false);
        }
    }
}

Built-in Directive

When the entire set of data is available on the client, you can use the built-in kendoDropDownFilter directive to filter the data on user input. To configure the kendoDropDownFilter directive, provide a DropDownFilterSettings object to it. DropDownFilterSettings enables you to set the case sensitivity of the performed search through the caseSensitive property and the search logic operator which provides the startsWith and contains options.

The provision of theDropDownFilterSettings configuration object is optional. By default, the kendoDropDownFilter directive performs a case-insensitive search with the startsWith operator.

import { Component } from '@angular/core';
import { DropDownFilterSettings } from '@progress/kendo-angular-dropdowns';

@Component({
  selector: 'my-app',
  template: `
    <div class="example-config">
        <input id="cs" type="checkbox" [(ngModel)]="filterSettings.caseSensitive">
        <label for="cs">Case-sensitive</label>
        <hr />
        <div>
            <input id="stw" type="radio" name="op" (click)="changeFilterOperator('startsWith')" checked>
            <label for="stw">StartsWith Operator</label>
        </div>
        <div>
            <input id="cnt" type="radio" name="op"(click)="changeFilterOperator('contains')">
            <label for="cnt">Contains Operator</label>
        </div>
    </div>

    <kendo-combobox
        [data]="data"
        [kendoDropDownFilter]="filterSettings"
        [textField]="'text'"
        [valueField]="'value'"
        [placeholder]="'T-shirt size'"
    >
    </kendo-combobox>
  `
})
class AppComponent {
    public data: Array<{ text: string, value: number }> = [
        { text: "Small", value: 1 },
        { text: "Medium", value: 2 },
        { text: "Large", value: 3 }
    ];

    public filterSettings: DropDownFilterSettings = {
        caseSensitive: false,
        operator: 'startsWith'
    };

    public changeFilterOperator(operator: string): void {
        this.filterSettings.operator = operator;
    }
}

In this article

Not finding the help you need?