Estilo condicional de grade Angular
Se você precisar fornecer qualquer estilo personalizado no componente IgxGrid, poderá fazê-lo no nível de linha ou célula.
Grid Conditional Row Styling
O componente IgxGrid no Ignite UI for Angular fornece duas maneiras de estilizar condicionalmente linhas com base em regras personalizadas.
- Definindo
rowClassesa entrada no componente IgxGrid; - Definindo
rowStylesa entrada no componente IgxGrid;
Mais adiante neste tópico, abordaremos os dois com mais detalhes.
Using rowClasses
Você pode estilizar condicionalmente as linhas IgxGrid definindo arowClasses entrada e regras personalizadas.
<!-- sample.component.html -->
<igx-grid #grid [data]="data" [height]="'600px'" [width]="'100%'" [rowClasses]="rowClasses">
...
</igx-grid>
ArowClasses entrada aceita um objeto literal, contendo pares-chave-valor, onde a chave é o nome da classe CSS, enquanto o valor é uma função de callback que retorna um valor booleano ou booleano.
// sample.component.ts
public rowClasses = {
activeRow: this.activeRowCondition
};
public activeRowCondition = (row: RowType) => this.grid?.navigation.activeNode?.row === row.index;
// sample.component.scss
::ng-deep {
.activeRow {
border: 2px solid #fc81b8;
border-left: 3px solid #e41c77;
}
}
Note
Use::ng-deep ouViewEncapsulation.None force os estilos personalizados para baixo através do componente atual e seus filhos.
Demo
Using rowStyles
As colunas agora expõem arowStyles propriedade que permite o estilo condicional das linhas de dados. De forma semelhante,rowClasses aceita um literal de objeto onde as chaves são propriedades de estilo e os valores são expressões para avaliação. Além disso, você pode aplicar um penteado normal (sem nenhuma condição).
A assinatura de callback para ambos
rowStyleserowClassesé:
(row: RowType) => boolean
Vamos definir nossos estilos:
// component.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'
};
<!-- sample.component.html -->
<igx-grid #grid1 [data]="data | async" [height]="'500px'" width="100%"
[autoGenerate]="false" [allowFiltering]="true" [rowStyles]="rowStyles">
...
</igx-grid>
Demo
Grid Conditional Cell Styling
Visão geral
O componente IgxGrid no Ignite UI for Angular fornece duas maneiras de estilizar condicionalmente de células com base em regras personalizadas.
- Definindo a
IgxColumnComponententradacellClassespara um literal de objeto contendo pares-chave-valor. A chave é o nome da classe CSS, enquanto o valor é uma função de callback que retorna um valor booleano ou booleano. O resultado é um estilo material conveniente da célula.
// component.ts file
public beatsPerMinuteClasses = {
downFont: this.downFontCondition,
upFont: this.upFontCondition
};
...
private downFontCondition = (rowData: any, columnKey: any): boolean => {
return rowData[columnKey] <= 95;
}
// component.scss file
.upFont {
color: red;
}
.downFont {
color: green;
}
Using cellClasses
Você pode estilizar condicionalmente as células IgxGrid definindo oIgxColumnComponent cellClasses Insira e defina regras personalizadas.
<!-- sample.component.html -->
<igx-column field="BeatsPerMinute" dataType="number" [cellClasses]="beatsPerMinuteClasses"></igx-column>
AcellClasses entrada aceita um objeto literal, contendo pares-chave-valor, onde a chave é o nome da classe CSS, enquanto o valor é uma função de callback que retorna um valor booleano ou booleano.
// sample.component.ts
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
};
// sample.component.scss
::ng-deep {
.upFont {
color: green;
}
.downFont {
color: red;
}
}
Note
Use::ng-deep ouViewEncapsulation.None force os estilos personalizados para baixo através do componente atual e seus filhos.
Demo
- Usando a
IgxColumnComponententradacellStylesque aceita um objeto literal onde as chaves são propriedades de estilo e os valores são expressões para avaliação.
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'
};
A assinatura de callback para ambos
cellStylesecellClassesagora foi alterada para:
(rowData: any, columnKey: string, cellValue: any, rowIndex: number) => boolean
Using cellStyles
As colunas agora expõem acellStyles propriedade que permite o estilo condicional das células da coluna. De forma semelhante,cellClasses aceita um literal de objeto onde as chaves são propriedades de estilo e os valores são expressões para avaliação. Além disso, você pode aplicar o penteado normal com facilidade (sem nenhuma condição).
No exemplo acima, criamos:
- Dois estilos diferentes que serão aplicados com base no índice da coluna.
- Você também vai mudar as
text colorlinhas pares ou ímpares.
A assinatura de callback para ambos
cellStylesé:
(rowData: any, columnKey: string, cellValue: any, rowIndex: number) => boolean
Vamos definir nossos estilos:
// component.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'
};
EmngOnInit vamos adicionar acellStyles configuração para cada coluna da coleção predefinidacolumns, que é usada para criar as colunas IgxGrid dinamicamente.
// component.ts
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();
}
// 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>
Defina umapopin animação
// component.scss
@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;
}
}
Demo
Known issues and limitations
- Se houver células vinculadas à mesma condição (de colunas diferentes) e uma célula for atualizada, as outras células não serão atualizadas com base no novo valor, se a condição for cumprida. Deve ser realizada uma verificação de tubos para aplicar as alterações ao restante das células. O exemplo abaixo mostra como fazer isso com um
spread operator(...)evento ononCellEdit. Isso vai copiar o objeto original com uma nova instância e conduzir o tubo puro a ser disparado.
public backgroundClasses = {
myBackground: (rowData: any, columnKey: string) => {
return rowData.Col2 < 10;
}
};
...
editDone(evt) {
this.backgroundClasses = {...this.backgroundClasses};
}
<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>
API References
Additional Resources
- Visão geral da grade
- Virtualização e desempenho
- Edição
- Paginação
- Filtragem
- Classificação
- Resumos
- Movimentação de Colunas
- Fixação de coluna
- Redimensionamento de colunas
- Ocultação de coluna
- Escolha
- Procurando
- Barra de ferramentas
- Cabeçalhos de várias colunas
- Tamanho