Visão geral do componente Grade de árvore do Angular
A Grade de Árvore Ignite UI for Angular é usada para exibir e manipular dados de auto-referência hierárquica ou plana. Vincule rapidamente seus dados com muito pouco código ou use uma variedade de eventos para personalizar diferentes comportamentos. Este componente fornece um rico conjunto de recursos, como seleção de dados, filtragem de estilo do Excel, classificação, paginação, agrupamento, modelagem, movimentação de coluna, fixação de coluna, exportação para Excel e CSV e muito mais.
Angular Tree Grid Example
Neste exemplo, você pode ver como os usuários podem exibir dados hierárquicos. Incluímos opções de filtragem e classificação, fixação e ocultação, seleção de linhas, exportação para excel e csv e modelagem de célula que usa nosso componente Sparkline. Além disso, você pode ver um exemplo de paginação personalizada com Angular Paginação.
Getting Started with Ignite UI for Angular Tree Grid
Para começar a usar o componente Ignite UI for Angular Tree Grid, primeiro você precisa instalar Ignite UI for Angular. Em um aplicativo Angular existente, digite o seguinte comando:
ng add igniteui-angular
Para obter uma introdução completa ao Ignite UI for Angular, leia o tópico de introdução.
O próximo passo é importar o IgxTreeGridModule
em seu arquivo app.module.ts.
// app.module.ts
import { IgxTreeGridModule } from 'igniteui-angular';
// import { IgxTreeGridModule } from '@infragistics/igniteui-angular'; for licensed package
@NgModule({
imports: [
...
IgxTreeGridModule,
...
]
})
export class AppModule {}
Como alternativa, a partir de 16.0.0
você pode importar o IgxTreeGridComponent
como uma dependência autônoma ou usar o IGX_TREE_GRID_DIRECTIVES
token para importar o componente e todos os seus componentes e diretivas de suporte.
// home.component.ts
import { IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular';
// import { IGX_TREE_GRID_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
@Component({
selector: 'app-home',
template: '<igx-tree-grid [data]="data"></igx-tree-grid>',
styleUrls: ['home.component.scss'],
standalone: true,
imports: [IGX_TREE_GRID_DIRECTIVES]
/* or imports: [IgxTreeGridComponent] */
})
export class HomeComponent {
public data: Employee [];
}
Agora que você tem o módulo ou as diretivas Ignite UI for Angular Tree Grid importados, pode começar a usar o igx-tree-grid
componente.
Using the Angular Tree Grid
Note
Este componente pode utilizar o HammerModule
opcionalmente. Ele pode ser importado no módulo raiz do aplicativo para que as interações de toque funcionem conforme o esperado.
O IgxTreeGridComponent
compartilha muitos recursos com o IgxGridComponent
, mas também adiciona a capacidade de exibir seus dados hierarquicamente. Para conseguir isso, o nos IgxTreeGridComponent
fornece algumas maneiras de definir as relações entre nossos objetos de dados - usando uma coleção filha para cada objeto de dados ou usando chaves primárias e estrangeiras para cada objeto de dados.
Tree Cells
Independentemente de qual opção é usada para criar a hierarquia da grade de árvore (coleção filho ou chaves primárias e estrangeiras), as linhas da grade de árvore são construídas de dois tipos de células:
IgxGridCell
- Célula comum que contém um valor.IgxGridCell
- Célula de árvore que contém um valor, um indicador de expansão/recolhimento e um elemento div de recuo, que é baseado no nível da linha da célula. O nível de um componente de linha pode ser acessado por meio dalevel
propriedade de seu internotreeRow
.
Note
Cada linha pode ter apenas uma célula de árvore, mas pode ter várias (ou nenhuma) células comuns.
Initial Expansion Depth
Inicialmente, a grade de árvore expandirá todos os níveis de nó e os mostrará. Esse comportamento pode ser configurado usando a expansionDepth
propriedade. Por padrão, seu valor é Infinito, o que significa que todos os níveis de nó serão expandidos. Você pode controlar a profundidade de expansão inicial definindo essa propriedade como um valor numérico. Por exemplo, 0 mostrará apenas nós de nível raiz,1 mostrará nós de nível raiz e seus nós filhos e assim por diante.
Child Collection
Quando estamos usando a opção de coleção filho, cada objeto de dados contém uma coleção filho, que é preenchida com itens do mesmo tipo que o objeto de dados pai. Dessa forma, cada registro em nossa grade de árvore terá uma referência direta a qualquer um de seus filhos. Nesse caso, a data
propriedade de nossa grade de árvore que contém a fonte de dados original será uma coleção definida hierarquicamente.
Para este exemplo, vamos usar a seguinte estrutura de coleção:
// Sample Employee Data
export const EMPLOYEE_DATA = [
{
Name: "Johnathan Winchester",
ID: 1,
HireDate: new Date(2008, 3, 20),
Age: 55,
Employees: [
{
Name: "Michael Burke",
ID: 3,
HireDate: new Date(2011, 6, 3),
Age: 43,
Employees: []
},
{
Name: "Thomas Anderson"
ID: 2,
HireDate: new Date(2009, 6, 19),
Age: 29,
Employees: []
},
...
]
},
...
]
Agora vamos começar importando nossa coleção de dados e vinculando-a data
à entrada de nossa grade de árvore.
<!--treeGridSample.component.html-->
<igx-tree-grid #treeGrid [data]="localData">
</igx-tree-grid>
Para que o IgxTreeGridComponent crie a hierarquia, teremos que definir sua childDataKey
propriedade como o nome da coleção filho usada em cada um de nossos objetos de dados. No nosso caso, essa será a coleção Employees. Além disso, desativaremos a geração automática de colunas e as definiremos manualmente, combinando-as com as propriedades reais de nossos objetos de dados. (A coleção Employees será usada automaticamente para a hierarquia, portanto, não há necessidade de incluí-la nas definições das colunas.)
<!--treeGridSample.component.html-->
<igx-tree-grid #treeGrid [data]="localData" childDataKey="Employees"
[autoGenerate]="false">
<igx-column field="Name" dataType="string"></igx-column>
<igx-column field="HireDate" dataType="date"></igx-column>
<igx-column field="Age" dataType="number"></igx-column>
</igx-tree-grid>
Agora habilitaremos os recursos de seleção de linha e paginação da grade de árvore usando as rowSelection
propriedades e . paging
Também ativaremos o recurso de resumos na primeira coluna e os recursos de filtragem, classificação, edição, movimentação e redimensionamento para cada uma de nossas colunas.
<!--treeGridSample.component.html-->
<igx-tree-grid #treeGrid [data]="localData" childDataKey="Employees"
[autoGenerate]="false" [rowSelection]="'multiple'" [allowFiltering]="true" [moving]="true">
<igx-column field="Name" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"
[hasSummary]="true"></igx-column>
<igx-column field="HireDate" dataType="date" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-column field="Age" dataType="number" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-paginator>
</igx-paginator>
</igx-tree-grid>
Por fim, habilitaremos a barra de ferramentas de nossa grade de árvore, juntamente com os recursos de ocultação de coluna, fixação de coluna e exportação usando o IgxGridToolbarComponent
, IgxGridToolbarHidingComponent
, IgxGridToolbarPinningComponent
e IgxGridToolbarExporterComponent
respectivamente.
<!--treeGridSample.component.html-->
<igx-tree-grid #treeGrid [data]="localData" childDataKey="Employees"
[autoGenerate]="false" [rowSelection]="'multiple'" [allowFiltering]="true" [moving]="true">
<igx-grid-toolbar>
<igx-grid-toolbar-title>Employees</igx-grid-toolbar-title>
<igx-grid-toolbar-actions>
<igx-grid-toolbar-hiding></igx-grid-toolbar-hiding>
<igx-grid-toolbar-pinning></igx-grid-toolbar-pinning>
<igx-grid-toolbar-exporter></igx-grid-toolbar-exporter>
</igx-grid-toolbar-actions>
</igx-grid-toolbar>
<igx-column field="Name" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-column field="HireDate" dataType="date" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-column field="Age" dataType="number" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-paginator [perPage]="6">
</igx-paginator>
</igx-tree-grid>
Você pode ver o resultado do código acima no início deste artigo na seção Exemplo de grade de árvore Angular.
Primary and Foreign keys
Quando estamos usando a opção de chaves primárias e estrangeiras, cada objeto de dados contém uma chave primária e uma chave estrangeira. A chave primária é o identificador exclusivo do objeto de dados atual e a chave estrangeira é o identificador exclusivo de seu pai. Nesse caso, a data
propriedade de nossa grade de árvore que contém a fonte de dados original será uma coleção simples.
Veja a seguir um exemplo de um componente que contém uma coleção simples definida com relação de chaves primárias e estrangeiras:
// treeGridSample.component.ts
@Component({...})
export class MyComponent implements OnInit {
public data: any[];
constructor() { }
public ngOnInit() {
// Primary and Foreign keys sample data
this.data = [
{ ID: 1, ParentID: -1, Name: "Casey Houston", JobTitle: "Vice President", Age: 32 },
{ ID: 2, ParentID: 1, Name: "Gilberto Todd", JobTitle: "Director", Age: 41 },
{ ID: 3, ParentID: 2, Name: "Tanya Bennett", JobTitle: "Director", Age: 29 },
{ ID: 4, ParentID: 2, Name: "Jack Simon", JobTitle: "Software Developer", Age: 33 },
{ ID: 5, ParentID: 8, Name: "Celia Martinez", JobTitle: "Senior Software Developer", Age: 44 },
{ ID: 6, ParentID: -1, Name: "Erma Walsh", JobTitle: "CEO", Age: 52 },
{ ID: 7, ParentID: 2, Name: "Debra Morton", JobTitle: "Associate Software Developer", Age: 35 },
{ ID: 8, ParentID: 10, Name: "Erika Wells", JobTitle: "Software Development Team Lead", Age: 50 },
{ ID: 9, ParentID: 8, Name: "Leslie Hansen", JobTitle: "Associate Software Developer", Age: 28 },
{ ID: 10, ParentID: -1, Name: "Eduardo Ramirez", JobTitle: "Development Manager", Age: 53 }
];
}
}
Nos dados de exemplo acima, todos os registros têm um ID, um ParentID e algumas propriedades adicionais, como Name, JobTitle e Age. Conforme mencionado anteriormente, a ID dos registros deve ser exclusiva. O ParentID contém a ID do nó pai. Se uma linha tiver um ParentID que não corresponda a nenhuma linha na grade da árvore, isso significa que essa linha é uma linha raiz.
A relação pai-filho é configurada usando as propriedades e foreignKey
da primaryKey
grade de árvore.
Aqui está o modelo do componente que demonstra como configurar a grade de árvore para exibir os dados definidos na coleção plana acima:
<!--treeGridSample.component.html-->
<igx-tree-grid #treeGrid [data]="data" primaryKey="ID" foreignKey="ParentID"
[autoGenerate]="false">
<igx-column field="Name" dataType="string"></igx-column>
<igx-column field="JobTitle" dataType="string"></igx-column>
<igx-column field="Age" dataType="number"></igx-column>
</igx-tree-grid>
Além disso, habilitaremos o recurso de seleção de linha da grade de árvore usando a rowSelection
propriedade e também os recursos de filtragem, classificação, edição, movimentação e redimensionamento para cada uma de nossas colunas.
<!--treeGridSample.component.html-->
<igx-tree-grid #treeGrid [data]="data" primaryKey="ID" foreignKey="ParentID"
[autoGenerate]="false" [rowSelection]="'multiple'" [allowFiltering]="true" [moving]="true">
<igx-column field="Name" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-column field="JobTitle" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
<igx-column field="Age" dataType="number" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
</igx-tree-grid>
E aqui está o resultado final:
Persistence and Integration
O recuo das células da árvore persiste em outros recursos da grade da árvore, como filtragem, classificação e paginação.
- Quando a classificação é aplicada em uma coluna, as linhas de dados são classificadas por níveis. Isso significa que as linhas de nível raiz serão classificadas independentemente de seus respectivos filhos. Suas respectivas coleções filhas também serão classificadas de forma independente e assim por diante.
- A primeira coluna (aquela que tem um
visibleIndex
de 0) é sempre a coluna da árvore. - A coluna que termina com um
visibleIndex
de 0 após operações como fixação de coluna, ocultação de coluna e movimentação de coluna torna-se a coluna de árvore. - As planilhas do Excel exportadas refletem a hierarquia agrupando os registros à medida que são agrupados na própria grade de árvore. Todos os estados expandidos de registros também seriam persistidos e refletidos.
- Ao exportar para CSV, os níveis e estados expandidos são ignorados e todos os dados são exportados como simples.
Angular Tree Grid Sizing
Consulte o tópico Dimensionamento de grade.
Estilização
A Grade da Árvore permite estilizar através do Ignite UI for Angular Theme Library
. A grade de grid-theme
árvore expõe uma ampla variedade de propriedades, o que permite a personalização de todos os recursos da grade de árvore.
Para começar a estilizar a Grade de Árvore, precisamos importar o index
arquivo, onde todas as funções do tema e mixins de componentes residem:
@use "igniteui-angular/theming" as *;
// IMPORTANT: Prior to Ignite UI for Angular version 13 use:
// @import '~igniteui-angular/lib/core/styles/themes/index';
Seguindo a abordagem mais simples, criamos um novo tema que estende e grid-theme
aceita os parâmetros, necessários para personalizar a grade da árvore conforme desejado.
Note
Não há uma função específica sass
de grade de árvore.
$custom-theme: grid-theme(
$cell-active-border-color: #ffcd0f,
$cell-selected-background: #6f6f6f,
$row-hover-background: #f8e495,
$row-selected-background: #8d8d8d,
$header-background: #494949,
$header-text-color: #fff,
$expand-icon-color: #ffcd0f,
$expand-icon-hover-color: #e0b710,
$resize-line-color: #ffcd0f,
$row-highlight: #ffcd0f
);
Note
Em vez de codificar os valores de cor como acabamos de fazer, podemos obter maior flexibilidade em termos de cores usando as palette
funções e color
. Consulte o Palettes
tópico para obter orientações detalhadas sobre como usá-los.
O último passo é incluir o tema do componente em nosso aplicativo.
@include css-vars($custom-theme);
Angular Tree Grid Styling Demo
Note
A amostra não será afetada Change Theme
pelo tema global selecionado.
Performance (Experimental)
O design do permite igxTreeGrid
que ele aproveite o recurso Event Coalescing que Angular introduzido. Esse recurso permite um desempenho aprimorado em termos de 20%
interações e capacidade de resposta. Esse recurso pode ser habilitado no nível do aplicativo simplesmente definindo as ngZoneEventCoalescing
propriedades and ngZoneRunCoalescing
como true
no bootstrapModule
método:
platformBrowserDynamic()
.bootstrapModule(AppModule, { ngZoneEventCoalescing: true, ngZoneRunCoalescing: true })
.catch(err => console.error(err));
Note
Isso ainda está em recurso experimental para o igxTreeGrid
. Isso significa que pode haver alguns comportamentos inesperados na Grade de Árvore. Em caso de encontrar tal comportamento, entre em contato conosco em nossa página do Github.
Note
Ativá-lo pode afetar outras partes de um aplicativo Angular ao qual o igxTreeGrid
não está relacionado.
Known Limitations
Limitação | Descrição |
---|---|
Modelando células de árvore | Ao modelar uma célula de árvore, o conteúdo que se estende fora dos limites da célula não será mostrado, a menos que seja posicionado em uma sobreposição. |
Agrupar por | O recurso Agrupar por não é suportado, pois é inerente à grade de árvore. |
Note
A grade da árvore tem um limite de profundidade de 25 níveis. O suporte a mais níveis requer a adição de classes CSS personalizadas no aplicativo. Você pode ver um exemplo dessa classe CSS abaixo:
.igx-grid__tree-cell--padding-level-26 {
padding-left: 39rem;
}
Note
igxTreeGrid
usa igxForOf
diretiva internamente, portanto, todas as igxForOf
limitações são válidas para igxTreeGrid
. Para obter mais detalhes, consulte a seção igxForOf Problemas conhecidos.
API References
- Componente IgxTreeGrid
- IgxGridCell
- IgxTreeGridRow
- Componente IgxGridIgx
- Estilos IgxGridComponent
- Serviço de Transação Base Igx
Theming Dependencies
- Tema IgxIcon
- Tema IgxInputGroup
- Tema IgxChip
- Tema IgxRipple
- Tema IgxButton
- Tema IgxOverlay
- Tema IgxDropDown
- Tema IgxCalendar
- Tema IgxSnackBar
- Tema IgxBadge