Having trouble getting help?
Contact Support
Contact Support
Achieve virtual scrolling in EJ2 TypeScript Drop down list control
13 Dec 20245 minutes to read
The Virtual Scrolling is used to display a large amount of data without buffering the entire load of a huge database record in the DropDownList, that is, when scrolling, the request is sent and fetch some amount of data from the server dynamically. Using the scroll
event, get the data and generate the list add to popup using the addItem
method.
Refer to the following code sample for virtual scrolling.
import { DropDownList } from '@syncfusion/ej2-dropdowns';
import { Query, DataManager, ODataV4Adaptor } from '@syncfusion/ej2-data';
let data: DataManager = new DataManager({
url: 'https://services.odata.org/V4/Northwind/Northwind.svc/Customers',
adaptor: new ODataV4Adaptor,
crossDomain: true
});
// initialize DropDownList component
let ddlObj: DropDownList = new DropDownList({
// bind the DataManager instance to dataSource property
dataSource: data,
// bind the Query instance to query property
query: new Query().select(['ContactName', 'CustomerID']),
// map the appropriate columns to fields property
fields: { text: 'ContactName', value: 'ContactName' },
// set the placeholder to DropDownList input element
placeholder: 'Select a customer',
// sort the resulted items
sortOrder: 'Ascending',
// set the height of the popup element
popupHeight: '200px',
actionComplete: function (e: any) {
let operator: Query = new Query().from('Customers').select('ContactName');
let start: number = 7;
let end: number = 12;
let listElement: HTMLElement = this.list;
listElement.addEventListener('scroll', () => {
if ((listElement.scrollTop + listElement.offsetHeight >= listElement.scrollHeight)) {
let filterQuery = operator.clone();
data.executeQuery(filterQuery.range(start, end)).then((event: any) => {
start = end;
end += 5;
ddlObj.addItem(event.result as { [key: string]: Object }[]);
}).catch((e: Object) => {
});
}
});
}
});
ddlObj.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/29.1.33/ej2-base/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/29.1.33/ej2-inputs/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/29.1.33/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>