Angular Ocultação de coluna de grade

    O Ignite UI for Angular Grid fornece um IgxColumnActionsComponent com um IgxColumnHidingDirective que permite que os usuários executem a ocultação de colunas diretamente por meio da interface do usuário ou usando o componente Angular. A grade da interface do usuário do material tem uma interface do usuário de ocultação de coluna integrada, que pode ser usada por meio da barra de ferramentas da grade para alterar o estado visível das colunas. Além disso, os desenvolvedores sempre podem definir a interface do usuário de ocultação de coluna como um componente separado e colocá-la em qualquer lugar que desejarem na página.

    Angular Grid Column Hiding Example

    Grid Setup

    Vamos começar criando nosso Grid e vinculando-o aos nossos dados. Também habilitaremos a filtragem e a classificação das colunas.

    <!--columnHiding.component.html-->
    
    <igx-grid #grid id="grid" [data]="data" [autoGenerate]="false" width="100%" height="560px" columnWidth="200px" [allowFiltering]="true">
        <igx-column [field]="'ID'" dataType="string" [sortable]="true" [hidden]="true"></igx-column>
        <igx-column [field]="'ContactName'" dataType="string" [sortable]="true" [hidden]="true"></igx-column>
        <igx-column [field]="'ContactTitle'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'City'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'CompanyName'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'Fax'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'Address'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'PostalCode'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'Country'" dataType="string" [sortable]="true"></igx-column>
        <igx-column [field]="'Phone'" dataType="string" [sortable]="true"></igx-column>
    </igx-grid>
    

    Toolbar's Column Hiding UI

    A interface interna de ocultação de coluna é colocada dentro de um IgxDropDownComponent na barra de ferramentas do Grid. Podemos mostrar/ocultar a interface do usuário de ocultação de coluna usando esse menu suspenso exato. Para isso, tudo o que precisamos fazer é definir o e o IgxGridToolbarActionsComponent​ ​IgxGridToolbarHidingComponent interior da grade. Também adicionaremos um título à nossa barra de ferramentas usando o e um estilo personalizado para o IgxGridToolbarTitleComponent wrapper do nosso Grid.

    <!--columnHiding.component.html-->
    
    <div class="grid__wrapper">
        <igx-grid ...>
            <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-actions>
            </igx-grid-toolbar>
            ...
        </igx-grid>
    </div>
    
    /* columnHiding.component.css */
    
    .grid__wrapper {
        margin: 10px;
    }
    

    O Grid nos fornece algumas propriedades úteis quando se trata de usar a interface do usuário de ocultação de coluna da barra de ferramentas. Ao usar a igx-grid-toolbar-hiding title propriedade, definiremos o título que é exibido dentro do botão suspenso na barra de ferramentas.

    <!--columnHiding.component.html-->
    
    <div class="grid__wrapper">
        <igx-grid>
            <igx-grid-toolbar>
                <igx-grid-toolbar-title>Employees</igx-grid-toolbar-title>
                <igx-grid-toolbar-actions>
                    <igx-grid-toolbar-hiding #hidingActionRef title="Column Hiding"></igx-grid-toolbar-hiding>
                </igx-grid-toolbar-actions>
            </igx-grid-toolbar>
        </igx-grid>
    </div>
    

    Usando a columnsAreaMaxHeight propriedade do IgxGridToolbarHidingComponent, podemos definir a altura máxima da área que contém as ações da coluna. Dessa forma, se tivermos muitas ações e nem todas caberem no contêiner, aparecerá uma barra de rolagem, que nos permitirá rolar para qualquer ação que desejarmos.

    // columnHiding.component.ts
    
    public ngAfterViewInit() {        
        this.hidingActionRef.columnsAreaMaxHeight = "200px";
    }
    

    Para usar o conjunto expandido de funcionalidades para a interface do usuário de ocultação de coluna, podemos usar a propriedade IgxColumnActionsComponent columnsAreaMaxHeight. Desta forma, podemos usá-lo de acordo com os requisitos de nossa aplicação.

    Você pode ver o resultado do código acima no início deste artigo na seção Exemplo de ocultação de coluna Angular.

    Custom Column Hiding UI

    Digamos que queremos definir manualmente o nosso IgxColumnActionsComponent, adicionar o IgxColumnHidingDirective para que ele saiba qual seria seu propósito e colocá-lo em qualquer lugar da página. Primeiro, porém, precisamos importar o IgxColumnActionsModule.

    // app.module.ts
    
    ...
    import {
        ...
        IgxColumnActionsModule 
    } from 'igniteui-angular';
    // import { ..., IgxColumnActionsModule } from '@infragistics/igniteui-angular'; for licensed package
    
    @NgModule({
        ...
        imports: [..., IgxColumnActionsModule],
    })
    export class AppModule {}
    

    Agora vamos criar o nosso IgxColumnActionsComponent. Em nosso aplicativo, vamos colocá-lo ao lado da grade (o que não é o caso da interface do usuário oculta a coluna da barra de ferramentas, onde o componente está dentro de um menu suspenso por design). Também definiremos a columns propriedade do componente para as colunas de nossa Grade e incluiremos alguns estilos personalizados para tornar nosso aplicativo ainda melhor!

    <!--columnHiding.component.html-->
    
    <div class="columnHidingContainer">
        <igx-column-actions igxColumnHiding #columnHidingUI [columns]="grid.columns">
        </igx-column-actions>
    </div>
    <div class="gridContainer">
        <igx-grid #grid [data]="data" [autoGenerate]="false" width="100%" height="500px" columnWidth="200px">
            ...
        </igx-grid>
    </div>
    
    /* columnHiding.component.css */
    
    .grid__wrapper {
        margin: 15px;
        display: flex;
        flex-direction: row;
    }
    
    .columnHidingContainer {
        min-width: 250px;
        height: 560px;
        display: flex;
        flex-direction: column;
        padding-left: 20px;
        padding-right: 20px;
        border: 1px gray;
        border-radius: 10px;
        box-shadow: 1px 1px 2px 2px rgba(50, 50, 50, 0.25);
        igx-column-actions {
            height: 460px;
        }
    }
    
    .columnsOrderOptionsContainer {
        margin-top: 20px;
        margin-bottom: 20px;
    }
    
    .gridContainer {
        width: 100%;
        min-width: 200px;
        display: flex;
        flex-direction: column;
        margin-left: 30px;    
    }
    

    Add title and filter prompt

    Mais algumas coisas que podemos fazer para enriquecer a experiência do usuário do nosso componente de ocultação de coluna é definir as title propriedades e . filterColumnsPrompt O title é exibido na parte superior e o filterColumnsPrompt é o texto do prompt exibido na entrada de filtro da nossa coluna que oculta a interface do usuário.

    <!--columnHiding.component.html-->
    
    <div class="columnHidingContainer">
        <igx-column-actions igxColumnHiding #columnHidingUI [columns]="grid.columns"
                           title="Column Hiding" filterColumnsPrompt="Type here to search">
        </igx-column-actions>
    </div>
    

    Add column display order options

    Também podemos permitir que o usuário escolha a ordem de exibição das colunas na interface do usuário de ocultação de colunas. Para isso, usaremos a columnDisplayOrder propriedade, que é uma propriedade do tipo enumeração e possui as seguintes opções:

    • Alfabético (ordene as colunas em ordem alfabética)
    • DisplayOrder (ordene as colunas de acordo com a forma como são exibidas na Grid)

    Vamos criar alguns botões de opção bem projetados para nossas opções! Só temos que ir em frente e obter o módulo IgxRadio.

    // app.module.ts
    
    ...
    import {
        ...
        IgxRadioModule    
    } from 'igniteui-angular';
    // import { ..., IgxRadioModule } from '@infragistics/igniteui-angular'; for licensed package
    
    @NgModule({
        ...
        imports: [..., IgxRadioModule],    
    })
    export class AppModule {}
    

    Agora, tudo o que precisamos fazer é vincular a checked propriedade de ambos os botões de opção, respectivamente, a condições diferentes e manipular seus eventos de clique.

    <!--columnHiding.component.html-->
    
    <div class="columnHidingContainer">
        ...
        <div class="columnsOrderOptionsContainer">
            <igx-radio [checked]="columnHidingUI.columnDisplayOrder === 'Alphabetical'"
                       (click)="columnHidingUI.columnDisplayOrder = 'Alphabetical'">
                Alphabetical order
            </igx-radio>
            <igx-radio [checked]="columnHidingUI.columnDisplayOrder === 'DisplayOrder'"
                       (click)="columnHidingUI.columnDisplayOrder = 'DisplayOrder'">
                Display order
            </igx-radio>
        </div>
    </div>
    

    Disable hiding of a column

    Podemos facilmente impedir que o usuário possa ocultar colunas por meio da interface do usuário de ocultação de coluna simplesmente definindo sua disableHiding propriedade como true.

    <!--columnHiding.component.html-->
    
    <div class="gridContainer">
        <igx-grid ... >
            ...
            <igx-column [field]="'ContactName'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column>
            <igx-column [field]="'ContactTitle'" dataType="string" [sortable]="true" [disableHiding]="true"></igx-column>
            ...
        </igx-grid>
    </div>
    

    Se tudo correr bem, é assim que nosso componente de interface do usuário de ocultação de coluna deve ficar:

    Estilização

    Para começar a estilizar o componente de ações da coluna, precisamos importar o arquivo de índice, 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';
    

    Usando a abordagem mais simples, criamos um novo tema que estende os column-actions-theme parâmetros e aceita os $title-color e . $background-color

    $custom-column-actions-theme: column-actions-theme(
      $background-color: #292826,
      $title-color: #ffcd0f
    );
    

    Como visto, o controla column-actions-theme apenas as cores do contêiner de ações da coluna, mas não afeta os botões, caixas de seleção e o grupo de entrada dentro dele. Digamos que também queremos estilizar os botões, então criaremos um novo tema de botões:

    $custom-button: button-theme(
      $foreground: #292826, 
      $disabled-foreground: rgba(255, 255, 255, .54)
    );
    
    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.

    Neste exemplo, alteramos apenas a cor do texto dos botões planos e a cor desativada do botão, mas fornece button-theme muito mais parâmetros para controlar o estilo do botão.

    O último passo é incluir os mixins de componentes, cada um com seu respectivo tema:

    @include css-vars($custom-column-actions-theme);
    
    .igx-column-actions {
      @include css-vars($custom-button);
    }
    
    Note

    Incluímos o criado tema de botão dentro de.igx-column-actions, para que apenas os botões de ocultação da coluna sejam estilizados. Caso contrário, outros botões na grade também seriam afetados.

    Note

    Se o componente estiver usando um Emulated ViewEncapsulation, é necessário penetrate que esse encapsulamento use::ng-deep para os componentes dentro do componente de ação da coluna (botões, caixas de seleção ... etc):

    @include css-vars($custom-column-actions-theme);
    
    :host {
      ::ng-deep {
        .igx-column-actions {
          @include css-vars($custom-button);
        }
      }
    }
    

    Demo

    API References

    Neste artigo, aprendemos como usar a interface do usuário de ocultação de coluna interna na barra de ferramentas do Grid e também a definimos como um componente separado. Introduzimos uma interface do usuário que permite ao usuário escolher entre diferentes ordens de coluna e definimos nosso próprio título personalizado e filtramos textos de prompt. Também usamos um componente de Ignite UI for Angular adicional - o botão IgxRadio.

    A coluna que oculta a interface do usuário tem mais algumas APIs para explorar, listadas abaixo.

    Componentes e/ou diretivas adicionais com APIs relativas que foram usadas:

    IgxGridComponent properties:

    IgxColumnComponent properties:

    IgxGridToolbarComponent properties:

    IgxGridToolbarComponent components:

    IgxGridToolbarComponent methods:

    IgxGridComponent events:

    IgxRadioComponent

    Styles:

    Additional Resources

    Nossa comunidade é ativa e sempre acolhedora para novas ideias.