列セル テンプレート
デフォルトでは、グリッドは列のフィールドを使用してセル内の値を文字列としてレンダリングします。これは基本的なシナリオでは問題ありませんが、レンダリングされる出力をカスタマイズしたい場合や、最終的な出力が異なるデータ フィールドの組み合わせである場合は、セル テンプレートをカスタマイズできます。
これを実現するには、コンテンツをテンプレート化する列の <igx-grid-lite-column>...</igx-grid-lite-column> 内で <ng-template> を使用します。
<igx-grid-lite-column field="avatar" header="Avatar">
<ng-template igxGridLiteCell let-value>
<igx-avatar shape="circle" alt="User avatar" [src]="value">
</igx-avatar>
</ng-template>
</igx-grid-lite-column>
IgxGridLiteCellTemplateDirective をインポートする必要もあります。
import { IgxGridLiteComponent, IgxGridLiteColumnComponent, IgxGridLiteCellTemplateDirective } from 'igniteui-angular/grids/lite';
それを imports 配列に追加します。
imports: [ IgxGridLiteCellTemplateDirective ]
フォーマッタ関数として使用する
簡単なシナリオでは、必要に応じてフォーマット済みの値を返すだけで済みます。以下は数値をロケール通貨形式で表示する例です。
public formatter = new Intl.NumberFormat('en-150', {
style: 'currency',
currency: 'EUR'
});
/** 値 `value = 123456.789` に対してカスタム通貨形式を返します。 */
protected formatCurrency = (value: number) => {
return this.formatter.format(value); // => "€123,456.79"
};
データ ソース内の異なるフィールドの値を組み合わせることも可能です。
public formatter = new Intl.NumberFormat('en-150', {
style: 'currency',
currency: 'EUR'
});
/** 製品から得た合計金額をカスタム通貨で返します。 */
protected formatCurrency = (value: number, unitsSold: number) => {
return this.formatter.format(value * unitsSold);
};
<igx-grid-lite-column field="price" header="Price" dataType="number">
<ng-template igxGridLiteCell let-value let-row="row">
{{formatCurrency(value, row.data.sold)}}
</ng-template>
</igx-grid-lite-column>
カスタム DOM テンプレート
<ng-template> 内で igniteui-angular のコンポーネントを使用する以外にも、セル コンテナー内にレンダリングされる独自の DOM テンプレートを作成することもできます。
標準の DOM 要素だけでなく、他のライブラリの Web コンポーネントもテンプレート化できます。たとえば、次のコード スニペットでは、igniteui-webcomponents から提供される rating コンポーネントを使用しています。これを適切に使用するには、以下で説明するいくつかの手順を実行する必要があります。
// カスタム テンプレート用の外部コンポーネントをインポートします
import {
defineComponents,
IgcRatingComponent
} from 'igniteui-webcomponents';
// サンプルで使用できるようにそれらを定義します
defineComponents(
IgcRatingComponent
);
<!-- テンプレートで Web Components の rating コンポーネントを使用します -->
<igx-grid-lite-column field="rating" header="Customer Rating" dataType="number">
<ng-template igxGridLiteCell let-value>
<igc-rating
[value]="value"
readonly
min="0"
max="5">
</igc-rating>
</ng-template>
</igx-grid-lite-column>
Note
テンプレートが複雑であればあるほど、パフォーマンス コストが増加します。パフォーマンスが重要な場合は複雑な DOM 構造を避けてください。
セル コンテキスト オブジェクト
カスタム セル レンダラーには GridLiteCellContext オブジェクトがパラメータvとして渡され、以下のプロパティを持ちます。
/**
* 行セル テンプレート コールバックのコンテキスト オブジェクトです。
*/
export interface IgxGridLiteCellTemplateContext<T extends object> {
/**
* テンプレートのセル要素の親要素です。
*/
parent: GridLiteCell<T>;
/**
* セルを含む行要素です。
*/
row: GridLiteRow<T>;
/**
* この列の現在の構成です。
*/
column: ColumnConfiguration<T, K>;
/**
* このセルに対するデータ ソースの値です。
*/
value: PropertyType<T, K>;
$implicit: PropertyType<T, K>;
}
その他のリソース
コミュニティに参加して新しいアイデアをご提案ください。