列セル テンプレート

    デフォルトでは、グリッドは列のフィールドを使用してセル内の値を文字列としてレンダリングします。これは基本的なシナリオでは問題ありませんが、レンダリングされる出力をカスタマイズしたい場合や、最終的な出力が異なるデータ フィールドの組み合わせである場合は、セル テンプレートをカスタマイズできます。

    これを実現するには、コンテンツをテンプレート化する列の <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>;
    }
    

    その他のリソース

    コミュニティに参加して新しいアイデアをご提案ください。