Ignite UI for Angular 10.2.7 バージョン時点での情報に基づいています。
IgxDropDown では、ドロップダウンリストを仮想化することで大量データを軽快に扱うことができます。仮想化機能は、IgxForDirective を組み合わせることで実現します。
IgxDropDown 仮想ドロップダウン
https://jp.infragistics.com/products/ignite-ui-angular/angular/components/drop-down-virtual
HTML テンプレート
<button class="button" igxButton="raised" [igxToggleAction]="dropdown" [igxDropDownItemNavigation]="dropdown">Item Series</button> <igx-drop-down #dropdown> <div class="drop-down-virtual-wrapper"> <igx-drop-down-item *igxFor="let item of items; index as index; scrollOrientation: 'vertical'; containerSize: itemsMaxHeight; itemSize: itemHeight;" [value]="item" [isHeader]="item.header" role="option" [disabled]="item.disabled" [index]="index"> {{ item.name }} </igx-drop-down-item> </div> </igx-drop-down> <div class="selection">Selected Model: <span>{{ dropdown.selectedItem?.value.name }}</span></div>
コンポーネント
import { Component } from '@angular/core'; interface DataItem { id: string; name: string; header: boolean; disabled: boolean; } @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent { title = 'igx-dropdown-virtualization'; public items: DataItem[]; public itemHeight = 48; public itemsMaxHeight = 240; constructor() { const itemsCollection: DataItem[] = []; for (let i = 0; i < 50; i++) { const series = (i * 10).toString(); itemsCollection.push({ id: series, name: `${series} Series`, header: true, disabled: false }); for (let j = 0; j < 10; j++) { itemsCollection.push({ id: `${series}_${j}`, name: `Series ${series}, ${i * 10 + j} Model`, header: false, disabled: j % 9 === 0 }); } } this.items = itemsCollection; } }
スタイル
.drop-down-virtual-wrapper { overflow: hidden; max-height: 240px; // width: 300px; //ドロップダウンリストの幅 } :host { display: flex; flex-flow: row; margin: 8px; } .button { width: 180px; } .selection { line-height: 2.25rem; padding: 0px 8px; } .igx-drop-down__item { padding: 0 0.8rem; }