Angular Grid 条件付きスタイル設定
IgxGrid コンポーネントでカスタム スタイルを提供する必要がある場合は、行レベルまたはセル レベルで行うことができます。
Grid 条件付き行のスタイル設定
Ignite UI for Angular の IgxGrid コンポーネントは、カスタム ルールに基づいて行の条件付きスタイル設定を作成する次の 2 つの方法を提供します:
さらにこのトピックでは、両方について詳しく説明します。
rowClasses の使用
rowClasses
入力を設定し、カスタム ルールを定義することで、IgxGrid 行のスタイルを条件付きで設定できます。
<igx-grid #grid [data]="data" [height]="'600px'" [width]="'100%'" [rowClasses]="rowClasses">
...
</igx-grid>
html
rowClasses
入力は、キー値のペアを含むオブジェクト リテラルを受け入れます。ここで、キーは CSS クラスの名前であり、値はブール値またはブール値を返すコールバック関数となります。
public rowClasses = {
activeRow: this.activeRowCondition
};
public activeRowCondition = (row: RowType) => this.grid?.navigation.activeNode?.row === row.index;
typescript
::ng-deep {
.activeRow {
border: 2px solid #fc81b8;
border-left: 3px solid #e41c77;
}
}
scss
::ng-deep
または ViewEncapsulation.None
を使用してカスタム スタイルを現在のコンポーネントとその子コンポーネントに適用します。
デモ
import { NgModule } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AppComponent } from "./app.component";
import { IgxGridModule } from "igniteui-angular";
import { GridRowClassesComponent } from "./grid/grid-rowClasses-sample/grid-rowClasses.component";
import { IgxPreventDocumentScrollModule } from "./directives/prevent-scroll.directive";
@NgModule({
bootstrap: [AppComponent],
declarations: [
AppComponent,
GridRowClassesComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
IgxPreventDocumentScrollModule,
IgxGridModule
],
providers: [],
entryComponents: [],
schemas: []
})
export class AppModule {}
ts
import { Component, OnInit, ViewChild } from '@angular/core';
import {
IgxGridComponent,
RowType
} from 'igniteui-angular';
import { DATA } from '../../data/nwindData';
@Component({
selector: 'app-grid-row-classes-sample',
styleUrls: ['./grid-rowClasses.component.scss'],
templateUrl: 'grid-rowClasses.component.html'
})
export class GridRowClassesComponent implements OnInit {
@ViewChild('grid', { static: true }) public grid: IgxGridComponent;
public data: any[];
public constructor() { }
public activeRowCondition = (row: RowType) => this.grid?.navigation.activeNode?.row === row.index;
public rowClasses = {
activeRow: this.activeRowCondition
};
public ngOnInit(): void {
this.data = DATA;
}
public handleChange() {
requestAnimationFrame(() => {
this.grid.pipeTrigger++;
this.grid.notifyChanges();
});
}
public handleLeftClick(args) {
args.event.preventDefault();
this.grid.navigation.setActiveNode({ row: args.cell.row.index, column: args.cell.column.visibleIndex });
}
}
ts
<div class="grid__wrapper">
<igx-grid [igxPreventDocumentScroll]="true" #grid [data]="data" [height]="'600px'" [width]="'100%'" (contextMenu)="handleLeftClick($event)" (activeNodeChange)="handleChange()" [rowClasses]="rowClasses">
<igx-column [field]="'ProductID'"></igx-column>
<igx-column [field]="'ProductName'"></igx-column>
<igx-column [field]="'UnitsInStock'" [dataType]="'number'"></igx-column>
<igx-column [field]="'UnitPrice'" [dataType]="'number'"></igx-column>
<igx-column [field]="'Discontinued'" [dataType]="'boolean'">
</igx-column>
<igx-column [field]="'OrderDate'" [dataType]="'date'"></igx-column>
</igx-grid>
</div>
html
.grid__wrapper {
display: flex;
justify-content: space-between;
margin: 16px;
flex-flow: column;
align-items: flex-start;
position: relative;
}
::ng-deep {
.activeRow {
border: 2px solid #fc81b8;
border-left: 3px solid #e41c77;
}
.toggle-section {
width: 300px;
height: 100px;
background-color: white;
}
}
.container {
display: flex;
igx-icon {
margin: 20px;
}
}
scss
このサンプルが気に入りましたか? 完全な Ignite UI for Angularツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。
rowStyles の使用
列は、データ行の条件付きスタイル設定を可能にする rowStyles
プロパティを公開するようになりました。rowClasses
と同様、キーがスタイル プロパティであり、値が評価用の式であるオブジェクト リテラルを受け取ります。また、通常のスタイル設定 (条件なし) を適用することもできます。
rowStyles
と rowClasses
の両方のコールバック署名は次のとおりです:
(row: RowType) => boolean
ts
次にスタイルを定義します。
public rowStyles = {
background: (row: RowType) => (+row.data['Change'] < 0 && +row.data['Change On Year(%)'] < 0) ? '#FF000088' : '#00000000',
border: (row: RowType) => (+row.data['Change'] < 0 && +row.data['Change On Year(%)'] < 0) ? '2px solid' : '1px solid',
'border-color': (row: RowType) => (+row.data['Change'] < 0 && +row.data['Change On Year(%)'] < 0) ? '#FF000099' : '#E9E9E9'
};
typescript
<igx-grid #grid1 [data]="data | async" [height]="'500px'" width="100%"
[autoGenerate]="false" [allowFiltering]="true" [rowStyles]="rowStyles">
...
</igx-grid>
html
デモ
import { NgModule } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AppComponent } from "./app.component";
import { IgxGridModule } from "igniteui-angular";
import { GridRowStylesComponent } from "./grid/grid-rowStyles-sample/grid-rowStyles.component";
import { IgxPreventDocumentScrollModule } from "./directives/prevent-scroll.directive";
import { FinancialDataService } from "./services/financial.service";
@NgModule({
bootstrap: [AppComponent],
declarations: [
AppComponent,
GridRowStylesComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
IgxPreventDocumentScrollModule,
IgxGridModule
],
providers: [FinancialDataService],
entryComponents: [],
schemas: []
})
export class AppModule {}
ts
import { Component, ViewChild } from '@angular/core';
import { IgxGridComponent, RowType } from 'igniteui-angular';
import { Observable } from 'rxjs';
import { FinancialDataService } from '../../services/financial.service';
@Component({
providers: [FinancialDataService],
selector: 'app-grid-row-styles-sample',
styleUrls: ['./grid-rowStyles.component.scss'],
templateUrl: 'grid-rowStyles.component.html'
})
export class GridRowStylesComponent {
@ViewChild('grid1', { static: true }) public grid1: IgxGridComponent;
public data: Observable<any[]>;
public rowStyles = {
background: (row: RowType) => (+row.data['Change'] < 0 && +row.data['Change On Year(%)'] < 0) ? '#FF000088' : '#00000000',
border: (row: RowType) => (+row.data['Change'] < 0 && +row.data['Change On Year(%)'] < 0) ? '2px solid' : '1px solid',
'border-color': (row: RowType) => (+row.data['Change'] < 0 && +row.data['Change On Year(%)'] < 0) ? '#FF000099' : '#E9E9E9'
};
constructor(private localService: FinancialDataService) {
this.localService.getData(1000);
this.data = this.localService.records;
}
public formatNumber(value: number) {
return value.toFixed(2);
}
public formatCurrency(value: number) {
return '$' + value.toFixed(2);
}
}
ts
<div class="grid__wrapper">
<igx-grid [igxPreventDocumentScroll]="true" #grid1 [data]="data | async" [height]="'500px'" width="100%"
[autoGenerate]="false" [allowFiltering]="true" [rowStyles]="rowStyles">
<igx-column [field]="'Category'" [width]="'120px'"></igx-column>
<igx-column [field]="'Type'" [width]="'150px'" [filterable]="false"></igx-column>
<igx-column [field]="'Open Price'" [width]="'120px'" dataType="number" [formatter]="formatCurrency">
</igx-column>
<igx-column [field]="'Price'" [width]="'120px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'Change'" [width]="'120px'" dataType="number" [headerClasses]="'headerAlignSyle'">
<ng-template igxHeader>
<span>Change</span>
</ng-template>
<ng-template igxCell let-val>
<div class="currency-badge-container">
<igx-badge *ngIf="val > 0" type="success" position="bottom-right" icon="arrow_upward"
class="badge-left"></igx-badge>
<igx-badge *ngIf="val < 0" type="error" position="bottom-right" icon="arrow_downward"
class="error badge-left"></igx-badge>
<span class="cellAlignSyle" [class.up]="val > 0" [class.down]="val < 0">{{ formatNumber(val)
}}</span>
</div>
</ng-template>
</igx-column>
<igx-column [field]="'Change(%)'" [width]="'130px'" dataType="number" [formatter]="formatNumber">
<ng-template igxHeader>
<span>Change(%)</span>
</ng-template>
</igx-column>
<igx-column [field]="'Change On Year(%)'" [width]="'150px'" dataType="number" [formatter]="formatNumber">
<ng-template igxCell let-val>
<div class="currency-badge-container">
<igx-badge *ngIf="val > 0" type="success" position="bottom-right" icon="arrow_upward"
class="badge-left"></igx-badge>
<igx-badge *ngIf="val < 0" type="error" position="bottom-right" icon="arrow_downward"
class="error badge-left"></igx-badge>
<span class="cellAlignSyle" [class.up]="val > 0" [class.down]="val < 0">{{ formatNumber(val)
}}%</span>
</div>
</ng-template>
</igx-column>
<igx-column [field]="'Buy'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'Sell'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'Spread'" [width]="'130px'" dataType="number" [formatter]="formatNumber"></igx-column>
<igx-column [field]="'Volume'" [width]="'130px'" dataType="number" [formatter]="formatNumber"></igx-column>
<igx-column [field]="'High(D)'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'Low(D)'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'High(Y)'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'Low(Y)'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
<igx-column [field]="'Start(Y)'" [width]="'130px'" dataType="number" [formatter]="formatCurrency"></igx-column>
</igx-grid>
<br />
</div>
html
.cellAlignSyle {
text-align: right;
float:right;
}
.cellAlignSyle > span {
float:right;
}
.up {
color: green;
}
.down {
color: red;
}
.headerAlignSyle {
text-align: right !important;
}
.grid__wrapper {
margin: 0 auto;
padding: 16px;
}
.currency-badge-container {
width: 80px;
float: right;
}
.badge-left {
float: left;
}
scss
Grid 条件付きセル スタイル設定
概要
Ignite UI for Angular の IgxGrid コンポーネントは、カスタム条件に基づいて 2 通りの条件付きセルのスタイル設定をサポートします。
public beatsPerMinuteClasses = {
downFont: this.downFontCondition,
upFont: this.upFontCondition
};
...
private downFontCondition = (rowData: any, columnKey: any): boolean => {
return rowData[columnKey] <= 95;
}
ts
.upFont {
color: red;
}
.downFont {
color: green;
}
scss
cellClasses の使用
IgxColumnComponent
cellClasses
入力を設定してカスタム条件を定義することにより、IgxGrid の条件付きセルのスタイルを設定できます。
<igx-column field="BeatsPerMinute" dataType="number" [cellClasses]="beatsPerMinuteClasses"></igx-column>
html
cellClasses
入力は、キーと値のペアを含むオブジェクト リテラルを受け取ります。キーは CSS クラスの名前です。値はブール値を返すコールバック関数またはブール値です。
private upFontCondition = (rowData: any, columnKey: any): boolean => {
return rowData[columnKey] > 95;
}
private downFontCondition = (rowData: any, columnKey: any): boolean => {
return rowData[columnKey] <= 95;
}
public beatsPerMinuteClasses = {
downFont: this.downFontCondition,
upFont: this.upFontCondition
};
typescript
::ng-deep {
.upFont {
color: green;
}
.downFont {
color: red;
}
}
scss
::ng-deep
または ViewEncapsulation.None
を使用してカスタム スタイルを現在のコンポーネントとその子コンポーネントに適用します。
デモ
import { NgModule } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AppComponent } from "./app.component";
import { IgxGridModule } from "igniteui-angular";
import { GridConditionalCellStyleComponent } from "./grid/grid-conditional-cell-style/grid-conditional-cell-style.component";
import { IgxPreventDocumentScrollModule } from "./directives/prevent-scroll.directive";
@NgModule({
bootstrap: [AppComponent],
declarations: [
AppComponent,
GridConditionalCellStyleComponent
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
IgxPreventDocumentScrollModule,
IgxGridModule
],
providers: [],
entryComponents: [],
schemas: []
})
export class AppModule {}
ts
import { Component, OnInit } from '@angular/core';
import { athletesData } from '../../data/athletesData';
@Component({
selector: 'app-grid-conditional-cell-style',
styleUrls: ['./grid-conditional-cell-style.component.scss'],
templateUrl: './grid-conditional-cell-style.component.html'
})
export class GridConditionalCellStyleComponent implements OnInit {
public data: any[];
public ngOnInit() {
this.data = athletesData;
}
private upFontCondition = (rowData: any, columnKey: any): boolean => rowData[columnKey] > 95;
private downFontCondition = (rowData: any, columnKey: any): boolean => rowData[columnKey] <= 95;
private top100Condition = (rowData: any, columnKey: any): boolean => rowData[columnKey] <= 100;
private belowTop100Condition = (rowData: any, columnKey: any): boolean => rowData[columnKey] > 100;
private speedCondition = (rowData: any, columnKey: any): boolean => rowData[columnKey] < 5;
public beatsPerMinuteClasses = {
downFont: this.downFontCondition,
upFont: this.upFontCondition
};
public rankClasses = {
belowTop100: this.belowTop100Condition,
top100: this.top100Condition
};
public speedClasses = {
'topSpeed topSpeedFont': this.speedCondition
};
}
ts
<div class="grid__wrapper">
<igx-grid [igxPreventDocumentScroll]="true" #grid1 [data]="data" height="500px" width="100%" [autoGenerate]="false">
<igx-column header="Rank" field="Id" [sortable]="true" [editable]="true" [sortable]="true" [cellClasses]="rankClasses"></igx-column>
<igx-column field="Name" header="Athlete" [sortable]="true"></igx-column>
<igx-column field="BeatsPerMinute" header="Beats per minute" dataType="number" [editable]="true" [sortable]="true"
[cellClasses]="beatsPerMinuteClasses"></igx-column>
<igx-column field="TopSpeed" header="Top Speed" dataType="number" [editable]="true" [sortable]="true"
[cellClasses]="speedClasses">
<ng-template igxCell let-val>
<div class="cell__inner">
{{ val | number: '1.1-5' }}
</div>
</ng-template>
</igx-column>
<igx-column field="TrackProgress" header="Track Progress" [editable]="true" [sortable]="true">
<ng-template igxCell let-val>
<div class="cellContainer">
<span class="cellAlignSyle">
{{ val / 100 | percent }}
</span>
</div>
</ng-template>
</igx-column>
<igx-column field="CountryFlag" header="Country">
<ng-template igxCell let-cell="cell">
<div class="cell__inner_2">
<span>
<img [src]="cell.value" class="flag" />
</span>
</div>
</ng-template>
</igx-column>
</igx-grid>
</div>
html
:host::ng-deep {
$primary-color-green: green;
$primary-color-red: red;
$primary-color-blue: royalblue;
$margin-right-images: 25px;
$images-font-size: 2.5em;
$images-font-weight: bold;
.grid__wrapper {
margin: 0 auto;
padding: 16px;
}
.cellContainer {
width: 100%;
float: right;
}
.cellAlignSyle {
width: 100%;
text-align: right;
float:right;
}
.upFont {
color: $primary-color-red;
}
.downFont {
color: $primary-color-green;
}
.topSpeedFont {
color: $primary-color-blue;
}
.contentStyle {
font-size: $images-font-size;
font-weight: $images-font-weight;
margin-right: $margin-right-images;
}
.arrow {
@extend .contentStyle;
content: "^";
}
.star {
@extend .contentStyle;
content: "*";
}
.top100:before {
@extend .arrow;
color: $primary-color-green;
margin-top: 10px;
}
.belowTop100:before {
@extend .arrow;
color: $primary-color-red;
transform: rotate(180deg);
-webkit-transform: rotate(180deg);
margin-top: -10px;
}
.topSpeed:before {
@extend .star;
font-weight: normal;
color: $primary-color-blue;
margin-top: 10px;
}
}
scss
public styles = {
'background': 'linear-gradient(180deg, #dd4c4c 0%, firebrick 100%)',
'text-shadow': '1px 1px 2px rgba(25,25,25,.25)',
'animation': '0.25s ease-in-out forwards alternate popin'
};
ts
cellStyles
と cellClasses
の両方のコールバック シグネチャが次のように変更されました。
(rowData: any, columnKey: string, cellValue: any, rowIndex: number) => boolean
ts
cellStyles の使用
列の cellStyles
プロパティを公開。列セルの条件付きスタイリングが可能になりました。cellClasses
と同様、キーがスタイル プロパティであり、値が評価用の式であるオブジェクト リテラルを受け取ります。また、通常のスタイリングを簡単に適用できます (条件なし)。
上記のサンプルで作成した項目:
- 列インデックスに基づいて適用される 2 つの異なるスタイル。
- また、偶数/奇数行に基づいて
テキストの色
を変更します。
両方の cellStyles
のコールバック署名は以下のとおりです。
(rowData: any, columnKey: string, cellValue: any, rowIndex: number) => boolean
ts
次にスタイルを定義します。
public oddColStyles = {
background: 'linear-gradient(to right, #b993d6, #8ca6db)',
color: (rowData, coljey, cellValue, rowIndex) => rowIndex % 2 === 0 ? 'white' : 'gray',
animation: '0.75s popin'
};
public evenColStyles = {
background: 'linear-gradient(to right, #8ca6db, #b993d6)',
color: (rowData, coljey, cellValue, rowIndex) => rowIndex % 2 === 0 ? 'gray' : 'white',
animation: '0.75s popin'
};
typescript
ngOnInit
で、IgxGrid 列を動的に作成するために使用される事前定義 columns
コレクションの各列に cellStyles
構成を追加します。
public ngOnInit() {
this.data = athletesData;
this.columns = [
{ field: 'Id' },
{ field: 'Position' },
{ field: 'Name' },
{ field: 'AthleteNumber' },
{ field: 'CountryName' }
];
this.applyCSS();
}
ts
public applyCSS() {
this.columns.forEach((column, index) => {
column.cellStyles = (index % 2 === 0 ? this.evenColStyles : this.oddColStyles);
});
}
public updateCSS(css: string) {
this.oddColStyles = {...this.oddColStyles, ...JSON.parse(css)};
this.evenColStyles = {...this.evenColStyles, ...JSON.parse(css)};
this.applyCSS();
}
ts
// component.html
<igx-grid
#grid1 [data]="data"
primaryKey="ID"
width="80%"
height="300px">
<igx-column *ngFor="let c of columns"
[field]="c.field"
[header]="c.field"
[cellStyles]="c.cellStyles">
</igx-column>
</igx-grid>
html
popin
アニメーションの定義
@keyframes popin {
0% {
opacity: 0.1;
transform: scale(.75, .75);
filter: blur(3px) invert(1);
}
50% {
opacity: .5;
filter: blur(1px);
}
100% {
transform: scale(1, 1);
opacity: 1;
filter: none;
}
}
scss
デモ
import { NgModule } from "@angular/core";
import { FormsModule } from "@angular/forms";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { AppComponent } from "./app.component";
import { IgxGridModule } from "igniteui-angular";
import { GridConditionalCellStyle2Component } from "./grid/grid-conditional-cell-style-2/grid-conditional-cell-style-2.component";
import { IgxPreventDocumentScrollModule } from "./directives/prevent-scroll.directive";
@NgModule({
bootstrap: [AppComponent],
declarations: [
AppComponent,
GridConditionalCellStyle2Component
],
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
IgxPreventDocumentScrollModule,
IgxGridModule
],
providers: [],
entryComponents: [],
schemas: []
})
export class AppModule {}
ts
import { Component, OnInit, ViewChild } from '@angular/core';
import { IgxGridComponent } from 'igniteui-angular';
import { athletesData } from '../../data/athletesData';
@Component({
selector: 'app-grid-conditional-cell-style-2',
styleUrls: ['./grid-conditional-cell-style-2.component.scss'],
templateUrl: './grid-conditional-cell-style-2.component.html'
})
export class GridConditionalCellStyle2Component implements OnInit {
@ViewChild('grid1', { read: IgxGridComponent, static: true })
public grid1: IgxGridComponent;
public data: any[];
public columns: any[];
public oddColStyles = {
background: 'linear-gradient(to right, #b993d6, #8ca6db)',
color: (rowData, coljey, cellValue, rowIndex) => rowIndex % 2 === 0 ? 'white' : 'gray',
animation: '0.75s popin'
};
public evenColStyles = {
background: 'linear-gradient(to right, #8ca6db, #b993d6)',
color: (rowData, coljey, cellValue, rowIndex) => rowIndex % 2 === 0 ? 'gray' : 'white',
animation: '0.75s popin'
};
public ngOnInit() {
this.data = athletesData;
this.columns = [
{ field: 'Id' },
{ field: 'Position' },
{ field: 'Name' },
{ field: 'AthleteNumber' },
{ field: 'CountryName' }
];
this.applyCSS();
}
public applyCSS() {
this.columns.forEach((column, index) => {
column.cellStyles = (index % 2 === 0 ? this.evenColStyles : this.oddColStyles);
});
}
public updateCSS(css: string) {
this.oddColStyles = {...this.oddColStyles, ...JSON.parse(css)};
this.evenColStyles = {...this.evenColStyles, ...JSON.parse(css)};
this.applyCSS();
}
}
ts
<div class="grid__wrapper">
<div>
<igx-input-group type="border">
<textarea style="font-family: monospace;" #userCSS igxInput cols="15" rows="5">{{ oddColStyles | json }}</textarea>
<igx-hint>Note: You cannot use the callback functionality here</igx-hint>
</igx-input-group>
<button igxButton="outlined" (click)="updateCSS(userCSS.value)">Apply new styles</button>
</div>
<igx-grid
#grid1 [data]="data"
primaryKey="ID"
height="300px">
<igx-column *ngFor="let c of columns"
[field]="c.field"
[header]="c.field"
[cellStyles]="c.cellStyles">
</igx-column>
</igx-grid>
</div>
html
.grid__wrapper {
margin: 0 auto;
padding: 16px;
transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
igx-grid {
margin-top: 25px;
}
}
@keyframes popin {
0% {
opacity: 0.1;
transform: scale(.75, .75);
filter: blur(3px) invert(1);
}
50% {
opacity: .5;
filter: blur(1px);
}
100% {
transform: scale(1, 1);
opacity: 1;
filter: none;
}
}
scss
既知の問題と制限
- 他の列に同じ条件でバインドされたセルがある場合、その 1 つのセルが更新された際に条件が満たされて要る場合も他のセルが新しい値に基づいて更新されない問題。
残りのセルに変更を適用するには、パイプ チェックを実行する必要があります。以下の例は、
onCellEdit
イベントで spread operator(...)
を使用してチェックを実行する方法を示します。これにより、元のオブジェクトが新しいインスタンスでコピーされ、パイプのみ発生します。
public backgroundClasses = {
myBackground: (rowData: any, columnKey: string) => {
return rowData.Col2 < 10;
}
};
...
editDone(evt) {
this.backgroundClasses = {...this.backgroundClasses};
}
ts
<igx-grid #grid1 [data]="data" height="500px" width="100%" (onCellEdit)="editDone($event)">
<igx-column field="Col1" dataType="number" [cellClasses]="backgroundClasses"></igx-column>
<igx-column field="Col2" dataType="number" [editable]="true" [cellClasses]="backgroundClasses"></igx-column>
<igx-column field="Col3" header="Col3" dataType="string" [cellClasses]="backgroundClasses"></igx-column>
</igx-grid>
html
API リファレンス
その他のリソース
コミュニティに参加して新しいアイデアをご提案ください。