Visão geral do componente de gaveta de navegação Angular
O componente Ignite UI for Angular Navigation Drawer é um contêiner de navegação lateral. Ele pode ficar acima do conteúdo e deslizar para dentro/fora da visualização ou ser fixado para expandir/recolher dentro do conteúdo. Uma versão mini fornece acesso rápido à navegação, mesmo quando fechada. O Navigation Drawer apresenta seleção de modo responsivo e gestos de toque. O conteúdo é completamente personalizável e pode fazer uso do estilo de item de menu padrão.
Angular Exemplo de gaveta de navegação
Introdução à Ignite UI for Angular gaveta de navegação
Para começar a usar o componente Ignite UI for Angular Navigation Drawer, 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 primeiro passo é importar o IgxNavigationDrawerModule dentro do nosso arquivo app.module.ts.
// app.module.ts ... import { HammerModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { IgxNavigationDrawerModule } from 'igniteui-angular'; // import { IgxNavigationDrawerModule } from '@infragistics/igniteui-angular'; for licensed package @NgModule({ ... imports: [..., BrowserAnimationsModule, HammerModule, IgxNavigationDrawerModule], ... }) export class AppModule {}
Como alternativa, a partir da 16.0.0 você pode importar o IgxNavigationDrawerComponent como uma dependência autônoma ou usar o token IGX_NAVIGATION_DRAWER_DIRECTIVES para importar o componente e todos os seus componentes e diretivas de suporte.
O conteúdo para a gaveta deve ser fornecido via <ng-template> decorado com a diretiva igxDrawer. Embora qualquer conteúdo possa ser fornecido no modelo, a diretiva igxDrawerItem (veja Estilo de item) está disponível para aplicar estilo pronto para uso aos itens. A diretiva tem duas propriedades @Input:
active para estilizar um item conforme selecionado.
isHeader para estilizar um item como um cabeçalho de grupo não pode estar ativo.
Um modelo adicional decorado com a diretiva igxDrawerMini pode ser fornecido para a variante Mini alternativa como estado fechado.
Observação
A Gaveta de Navegação pode flutuar acima do conteúdo ou ser fixada ao lado dele. Por padrão, a gaveta alterna entre esses modos dependendo do tamanho da viewport. Veja Modos para mais informações.
Para acomodar os modos de troca de gaveta, um wrapper flexível simples em torno das duas seções de conteúdo pode ser estilizado assim:
Para adicionar elementos à nossa gaveta de navegação e poder selecioná-los, nosso arquivo TypeScript deve ficar assim:
/* app.component.ts */ @Component({...}) export class AppComponent { public navItems = [ { name: 'account_circle', text: 'Avatar' }, ... ]; public selected = 'Avatar'; public navigate(item) { this.selected = item.text; } }
Existem várias maneiras de abrir e fechar a gaveta. As propriedades de entrada podem ser vinculadas ao estado do aplicativo, acesso programático à API no componente usando um @ViewChild(IgxNavigationDrawerComponent) referência ou mesmo neste caso usando o #drawervariável de referência de modelo:
/* app.component.ts */ import { Component, ViewChild } from '@angular/core'; import { IgxNavigationDrawerComponent } from 'igniteui-angular'; // import { IgxNavigationDrawerComponent } from '@infragistics/igniteui-angular'; for licensed package @Component({...}) export class AppComponent { @ViewChild(IgxNavigationDrawerComponent, { static: true }) public drawer: IgxNavigationDrawerComponent; // And of course add the key line to our navigate function public navigate(item) { this.selected = item.text; this.drawer.close(); } }
Se tudo correr bem, você deverá ver o exemplo de demonstração no seu navegador.
Modos
O modo Unpinned (elevado acima do conteúdo) é o comportamento normal em que a gaveta fica acima e aplica uma sobreposição escurecida sobre o conteúdo. Geralmente usado para fornecer navegação temporária adequada para dispositivos móveis.
A gaveta pode ser fixada para aproveitar telas maiores, colocando-a dentro do fluxo de conteúdo normal com posição relativa. Dependendo se o aplicativo fornece uma maneira de alternar a gaveta, o modo fixado pode ser usado para obter comportamento permanente ou persistente.
Observação
Por padrão, o Navigation Drawer é responsivo, mudando ativamente entre o modo não fixado e fixado com base no tamanho da tela. Esse comportamento é controlado pela propriedade pinThreshold e pode ser desabilitado definindo um valor falso (por exemplo, 0).
Configuração fixada (persistente)
Pin altera a posição da gaveta de fixed para relative para colocá-la no mesmo fluxo que o conteúdo. Portanto, o estilo do aplicativo deve levar em conta esse layout, especialmente se a gaveta precisar ser alternada nesse modo. Embora haja mais de uma maneira de obter esse layout fluido (incluindo programaticamente), a maneira mais fácil é usar as diretivas igxLayout e igxFlex.
Veja como isso ficaria aplicado ao exemplo anterior:
A gaveta aplica flex-basis em seu elemento host, permitindo que o restante do conteúdo ocupe a largura restante. Alternativamente, pulando as diretivas using, o estilo manual pode ser aplicado similar a:
Com a variante mini, a Gaveta de Navegação muda sua largura em vez de fechar. Mais comumente usada para manter a seleção rápida disponível na lateral o tempo todo, deixando apenas os ícones. Esta variante é habilitada simplesmente pela presença de um mini template alternativo decorado com a diretiva igxDrawerMini.
A variante mini é comumente usada em uma configuração persistente, então definimos pin e desabilitamos o limite de resposta:
Para usar o Angular Router, primeiro precisamos importar o git de @angular/router e criar uma instância do router em nosso construtor. Então temos que definir nossos itens de navegação usando o router para seus valores de link.
Você pode usar routerLinkActive onde ele é atribuído a uma variável de modelo e sua propriedade isActive pode ser usada para vincular à entrada active no igxDrawerItem. O modelo <igx-nav-drawer> ficaria assim:
Depois que todas as etapas acima forem concluídas, seu aplicativo deverá ficar assim:
Navegação hierárquica
Para criar uma navegação hierárquica multinível usando o IgxNavigationDrawerComponent, você pode usar o IgxTreeComponent no template igxDrawer. A árvore pode ser construída diretamente do objeto Routes do seu aplicativo. Veja como isso pode ser alcançado:
Neste exemplo, não estamos usando o igxDrawerItem, em vez disso, estamos preenchendo diretamente com conteúdo igxDrawer personalizado, neste caso usando um igx-tree.
import { menusRoutes } from '../../menus-routing.module'; @Component({ selector: 'app-nav-drawer-hierarchical', templateUrl: './nav-drawer-hierarchical.component.html', styleUrls: ['./nav-drawer-hierarchical.component.scss'], }) export class NavDrawerHierarchicalComponent { public routes = menusRoutes; }
Neste exemplo, estamos preenchendo as rotas com data de roteamento personalizados, que contêm uma propriedade displayName, usada para visualizar o texto do link nos nós igx-tree. Uma Route de exemplo se parece com isso:
Há também roteamento filho extraído da propriedade children das rotas. O exemplo mostra dois níveis de hierarquia, mas se seu roteamento tiver mais, então tudo o que você precisa fazer é definir os níveis abaixo do segundo nos modelos de nó de árvore.
Observação
Tenha em mente que algumas rotas, como redirecionamento de rota vazia, rota de erro, página não encontrada, etc., podem não ser adequadas para visualização direta. Antes de vincular a árvore ao objeto de roteamento, você pode remover essas rotas do seu objeto na lógica do seu componente.
O exemplo abaixo apresenta as capacidades de uma estrutura hierárquica usando dados predefinidos com nomes de tópicos e links. A estrutura permite que os usuários gerem facilmente navegações funcionais e detalhadas e tenham a capacidade de definir cada elemento se deve ser exibido como um link ou como um indicador.
Estilização
Para começar a estilizar a gaveta de navegação, precisamos importar o arquivo index, onde todas as funções do tema e mixins de componentes estão localizados:
@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 o navdrawer-theme e aceita alguns parâmetros que estilizam os itens do navdrawer: