Angular Navegação do teclado da grade

    A navegação por teclado no IgxGrid fornece uma grande variedade de interações de teclado para o usuário. Melhora a acessibilidade do IgxGrid e permite navegar por qualquer tipo de elemento interno (célula, linha, cabeçalho de coluna, barra de ferramentas, rodapé, etc.). Essa funcionalidade é habilitada por padrão e o desenvolvedor tem a opção de substituir qualquer um dos comportamentos padrão de maneira fácil.

    As tabulações do IgxGrid foram reduzidas para que a navegação seja compatível com os padrões de acessibilidade do W3C e conveniente de usar.

    Atualmente, o IgxGrid introduz as seguintes paradas de tabulação:

    • Área GroupBy ou Toolbar (se habilitada);
    • Cabeçalho IgxGrid;
    • Corpo IgxGrid;
    • Resumos de coluna (se ativado);
    • Paginador IgxGrid (se habilitado);
    Note

    Devido a essa mudança, a navegação entre as células com tab e Shift + Tab não é mais suportada no IgxGrid. Pressionar a Tab tecla agora percorre as paradas de tabulação na seguinte ordem: GroupBy / Toolbar-> Headers-> Body-> Summaries-> Footer / Paginator.

    Note

    A exposição de qualquer elemento focalizável no corpo do IgxGrid por meio do modelo pode introduzir efeitos colaterais na navegação do teclado, já que o comportamento padrão do navegador não é impedido. É responsabilidade do desenvolvedor evitá-lo ou modificá-lo adequadamente.

    Header Navigation

    Um suporte completo à navegação por teclado no cabeçalho IgxGrid agora é introduzido. Os cabeçalhos das colunas podem ser facilmente percorridos com as teclas de seta. Além disso, há uma série de combinações de teclas que acionam ações nas colunas, como filtragem, classificação, agrupamento e etc. Quando o contêiner de cabeçalho IgxGrid está focado, as seguintes combinações de teclas estão disponíveis:

    Key Combinations

    • Arrow Up navega uma célula para cima nos cabeçalhos (sem looping). Disponível somente quando Layout de várias linhas (MRL) ou Cabeçalhos de várias colunas (MCH) são definidos
    • Arrow Down navega uma célula para baixo nos cabeçalhos (sem quebra). Disponível somente quando Layout de várias linhas (MRL) ou Cabeçalhos de várias colunas (MCH) são definidos
    • Arrow Left navega uma célula restante (sem looping)
    • Arrow Right navega uma célula para a direita (sem quebra entre linhas)
    • Ctrl + Arrow Left navega até a célula mais à esquerda da linha; se o LMR ou o MCH estiverem ativados, navega para a célula mais à esquerda no mesmo nível
    • Home navega até a célula mais à esquerda da linha; se o LMR ou o MCH estiverem ativados, navega para a célula mais à esquerda no mesmo nível
    • Ctrl + Arrow Right navega até a célula mais à direita na linha; se o LMR ou o MCH estiverem ativados, navega para a célula mais à direita no mesmo nível
    • End navega até a célula mais à direita na linha; se o LMR ou o MCH estiverem ativados, navega para a célula mais à direita no mesmo nível
    • Alt + L abre a caixa de diálogo Filtragem Avançada se a Filtragem Avançada estiver ativada
    • Ctrl + Shift + L abre a caixa de diálogo Filtro de Estilo do Excel ou o filtro padrão (linha) se a coluna for filtrável
    • Ctrl + Arrow Up classifica o cabeçalho da coluna ativa na ordem ASC. Se a coluna já estiver classificada no ASC, o estado de classificação será limpo
    • Ctrl + Arrow Down classifica o cabeçalho da coluna ativa na ordem DSC. Se a coluna já estiver classificada na DSC, o estado de classificação será limpo
    • Space seleciona a coluna; Se a coluna já estiver selecionada, a seleção será desmarcada
    • Shift + Alt + Arrow Left agrupa a coluna, se a coluna estiver marcada como agrupável
    • Shift + Alt + Arrow Right desagrupa a coluna, se a coluna estiver marcada como agrupável
    • Alt + Arrow Left ou Alt + Arrow Up recolhe o cabeçalho do grupo de colunas, se o cabeçalho ainda não estiver recolhido
    • Alt + Arrow Right ou 'Alt + Seta para baixo expande o cabeçalho do grupo de colunas, se o cabeçalho ainda não estiver expandido

    Body navigation

    Quando o corpo do IgxGrid está focado, as seguintes combinações de teclas estão disponíveis:

    Key Combination

    • Arrow Up- navega uma célula para cima (sem encapsulamento)
    • Arrow Down navega uma célula para baixo (sem encapsulamento)
    • Arrow Left navega uma célula à esquerda (sem quebra entre as linhas)
    • Arrow Right- navega uma célula para a direita (sem quebra entre as linhas)
    • Ctrl + Arrow Left navega até a célula mais à esquerda da linha
    • Ctrl + Arrow Right Navega para a célula mais à direita na linha
    • Ctrl + Arrow Up navega até a primeira célula da coluna
    • Ctrl + Arrow Down Navega até a última célula da coluna
    • Home navega até a célula mais à esquerda da linha
    • End Navega para a célula mais à direita na linha
    • Ctrl + Home Navega até a célula de dados superior esquerda na grade
    • Ctrl + End Navega até a célula de dados inferior direita da grade
    • Page Up rola uma página (porta de visualização) para cima
    • Page Down rola uma página (porta de visualização) para baixo
    • Enter entra no modo de edição
    • F2 entra no modo de edição
    • Esc sai do modo de edição
    • Tab disponível apenas se houver uma célula no modo de edição; move o foco para a próxima célula editável na linha; Depois de chegar à última célula da linha, move o foco para a primeira célula editável na próxima linha. Quando a Edição de Linha está ativada, move o foco da célula editável mais à direita para os botões CANCELAR e CONCLUÍDO e do botão CONCLUÍDO para a célula editável mais à esquerda na linha
    • Shift + Tab- disponível apenas se houver uma célula no modo de edição; move o foco para a célula editável anterior na linha; Depois de alcançar a primeira célula da linha, move o foco para a última célula editável na linha anterior. Quando a Edição de Linha está ativada, move o foco da célula editável mais à direita para os botões CANCELAR e CONCLUÍDO e do botão CONCLUÍDO para a célula editável mais à direita na linha
    • Space- seleciona a linha, se Row Selection estiver ativada
    • Alt + Arrow Left ou Alt + Arrow Up- sobre Linha de grupo - recolhe o grupo
    • Alt + Arrow Right ou Alt + Arrow Down- sobre Linha de grupo - expande o grupo
    • Alt + Arrow Left ou Alt + Arrow Up- sobre Linha de detalhes mestre - recolhe a exibição de detalhes
    • Alt + Arrow Right ou Alt + Arrow Down- sobre Linha de detalhes mestre - expande a visualização de detalhes
    • Space- sobre Linha do grupo - seleciona todas as linhas do grupo, se rowSelection a propriedade estiver definida como várias

    Pratique todas as ações mencionadas acima no exemplo de demonstração abaixo. Concentre qualquer elemento de grade navegável e uma lista com algumas das ações disponíveis para o elemento será mostrada para guiá-lo.

    Demo

    Custom keyboard navigation

    Substituir o comportamento padrão de uma determinada tecla ou combinação de teclas é um dos benefícios que o recurso de navegação por teclado oferece. Por exemplo: pressione a Enter tecla ou Tab para navegar até a próxima célula ou a célula abaixo. Esse ou qualquer outro cenário de navegação é facilmente obtido pela API de navegação por teclado:

    API Descrição Argumentos
    gridKeydown Um evento que é emitido quando qualquer uma das combinações de teclas descritas acima é executada. Pode ser cancelado. Para qualquer outra tecla pressionada/combinada, use o evento padrãoonkeydown. IGridKeydownEventArgs
    activeNodeChange Um evento que é emitido quando o nó ativo é alterado. Você pode usá-lo para determinar a posição do foco ativo (cabeçalho, tbody etc.), índice de coluna, índice de linha ou nível aninhado. IActiveNodeChangeEventArgs
    navigateTo Navega para uma posição na grade, com base no fornecidorowindex evisibleColumnIndex. Ele também pode executar uma lógica personalizada sobre o elemento de destino, por meio de uma função de retorno de chamada que aceita o parâmetro do tipo{ targetType: GridKeydownTargetType, target: Object }. Uso:
    grid.navigateTo(10, 3, (args) => { args.target.nativeElement.focus(); });
    rowindex: number, visibleColumnIndex: number, callback: ({ targetType: GridKeydownTargetType, target: Object }) => {}
    getNextCell retornaICellPosition objeto, que define a próxima célula porrowIndex evisibileColumnIndex. Uma função de retorno de chamada pode ser passada como um terceiro parâmetro dogetNextCell método. A função de retorno de chamada aceitaIgxColumnComponent como um parâmetro e retorna uma indicação deboolean valor se um determinado critério for atendido:
    const nextEditableCell = grid.getNextCell(0, 4, (col) => col.editable);
    currentRowIndex: número,currentVisibleColumnIndex: número,callback: (IgxColumnComponent) => booleano
    getPreviousCell retornaICellPosition objeto, que define a célula anterior porrowIndex evisibileColumnIndex. Uma função de retorno de chamada pode ser passada como um terceiro parâmetro dogetPreviousCell método. A função de retorno de chamada aceitaIgxColumnComponent como um parâmetro e retorna uma indicação deboolean valor se um determinado critério for atendido:
    const prevEditableCell = grid.getPreviousCell(0, 4, (col) => col.editable);
    currentRowIndex: número,currentVisibleColumnIndex: número,callback: (IgxColumnComponent) => booleano

    Vamos experimentar a API para demonstrar como obter cenários comuns, como validação de entrada do usuário e navegação personalizada. Primeiro, precisamos registrar um manipulador de eventos para o gridKeydown evento:

    <igx-grid #grid1 [data]="data" [primaryKey]="'ProductID'" (gridKeydown)="customKeydown($event)">
    
    public customKeydown(args: IGridKeydownEventArgs) {
        const target: IgxGridCell = args.target as IgxGridCell;
        const evt: KeyboardEvent = args.event as KeyboardEvent;
        const type = args.targetType;
    
        if (type === 'dataCell' && target.inEditMode && evt.key.toLowerCase() === 'tab') {
            // 1. USER INPUT VALIDATON ON TAB
        }
        if (type === 'dataCell' && evt.key.toLowerCase() === 'enter') {
            // 2. CUSTOM NAVIGATION ON ENTER KEY PRESS
        }
    }
    

    Com base nos valores de IGridKeydownEventArgs, identificamos dois casos, em que fornecer nossa própria lógica (veja acima). Agora, usando os métodos da API, vamos realizar o desejado - se o usuário estiver pressionando Tab a tecla sobre uma célula no modo de edição, realizaremos a validação na entrada. Se o usuário estiver pressionando Enter a tecla sobre uma célula, moveremos o foco para a célula na próxima linha:

        // 1. USER INPUT VALIDATON ON TAB
        if (target.column.dataType === 'number' && target.editValue < 10) {
            // alert the user that the input is invalid
            return;
        }
        // 2. CUSTOM NAVIGATION ON ENTER KEY PRESS
        this.grid1.navigateTo(target.row.index + 1, target.column.visibleIndex, (obj) => {
                obj.target.activate();
            });
    
    Note

    Consulte o código de exemplo para obter detalhes completos da implementação.

    Use a demonstração abaixo para experimentar os cenários personalizados que acabamos de implementar:

    • Clique duas vezes ou pressione F2 a tecla em uma célula na coluna Ordem, altere o valor para 7 e pressione Tab a tecla . A mensagem de prompt será exibida.
    • Selecione uma célula e pressione Enter a tecla algumas vezes. Cada pressionamento de tecla moverá o foco para uma célula na próxima linha, na mesma coluna.

    Demo

    Known Limitations

    Limitação Descrição
    Navegando dentro de uma grade com contêiner pai rolável. Se a grade estiver posicionada dentro de um contêiner pai rolável e o usuário navegar até uma célula de grade que está fora de exibição, o contêiner pai não será rolado.

    API References

    Additional Resources

    Nossa comunidade é ativa e sempre acolhedora para novas ideias.