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
- Navegação do teclado da grade hierárquica
- Navegação do teclado da grade de árvore
- Visão geral da grade
- Virtualização e desempenho
- Filtragem
- Classificação
- Resumos
- Movimentação de Colunas
- Fixação de coluna
- Redimensionamento de colunas
- Escolha