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;
}

製品について

Ignite UI for Angular