Having trouble getting help?
Contact Support
Contact Support
Filter in EJ2 TypeScript Auto complete control
2 May 20235 minutes to read
The AutoComplete data can be filtered based on both text and value fields using predicate
of dataManager through filtering event. The filtered data can be again updated through updateData
method.
In the following example, filtering is done based on text and value fields.
import { AutoComplete} from '@syncfusion/ej2-dropdowns';
import { Query, Predicate} from '@syncfusion/ej2-data';
//define the array of complex data
let searchData: { [key: string]: Object; }[] = [
{ Name: 'Australia', Code: 'AU' },
{ Name: 'Bermuda', Code: 'BM' },
{ Name: 'Canada', Code: 'CA' },
{ Name: 'Cameroon', Code: 'CM' },
{ Name: 'Denmark', Code: 'DK' },
{ Name: 'France', Code: 'FR' },
{ Name: 'Finland', Code: 'FI' },
{ Name: 'Germany', Code: 'DE' },
{ Name: 'Greenland', Code: 'GL' },
{ Name: 'Hong Kong', Code: 'HK' },
{ Name: 'India', Code: 'IN' },
{ Name: 'Italy', Code: 'IT' },
{ Name: 'Japan', Code: 'JP' },
{ Name: 'Mexico', Code: 'MX' },
{ Name: 'Norway', Code: 'NO' },
{ Name: 'Poland', Code: 'PL' },
{ Name: 'Switzerland', Code: 'CH' },
{ Name: 'United Kingdom', Code: 'GB' },
{ Name: 'United States', Code: 'US' }];
//initiates the component
let atcObject: AutoComplete = new AutoComplete({
// bind the country data to dataSource property
dataSource: searchData,
// maps the appropriate column to fields property
fields: { value: "Code", text:"Name" },
//set the placeholder to AutoComplete input
placeholder: "Find a country",
//set item template
itemTemplate:"<span><span class='name'>${Name}</span>-<span class ='code'>${Code}</span></span>",
filtering: function(e)
{
e.preventDefaultAction=true;
let predicate = new Predicate('Name', 'contains', e.text);
predicate = predicate.or('Code', 'contains', e.text);
let query = new Query();
//frame the query based on search string with filter type.
query = (e.text != "") ? query.where(predicate) : query;
//pass the filter data source, filter query to updateData method.
e.updateData(this.dataSource, query);
}
});
atcObject.appendTo('#atcelement');
<!DOCTYPE html>
<html lang="en">
<head>
<title>Essential JS 2 AutoComplete</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Typescript UI Controls" />
<meta name="author" content="Syncfusion" />
<link href="styles.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-base/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-inputs/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/28.2.3/ej2-dropdowns/styles/material.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container' style="margin:0 auto; width:250px;">
<input type="text" tabindex="1" id='atcelement' />
</div>
</body>
</html>