Visão geral da árvore Web Components

    Ignite UI for Web Components Tree, também conhecido como componente TreeView, é um controle de alto desempenho que visualiza estruturas de dados expansíveis dentro de uma UI em forma de árvore, permitindo que você aplique carga sob demanda para itens filhos. O Ignite UI for Web Components Tree também fornece recursos como expansão e recolhimento de nós, navegação de aplicativo aninhada, nós Ignite UI for Web Components Tree que podem ser gerados manualmente ou de uma fonte de dados vinculada.

    Para os usuários finais, isso significa que eles podem navegar facilmente por diferentes páginas do aplicativo, usar seleção, caixas de seleção, adicionar textos, ícones, imagens e muito mais.

    O componente Tree Ignite UI for Web Components permite que os usuários representem dados hierárquicos em uma estrutura de visualização em árvore, mantendo relacionamentos pai-filho, bem como definam uma estrutura de visualização em árvore estática sem um modelo de dados correspondente. Seu objetivo principal é permitir que os usuários finais visualizem e naveguem dentro de estruturas de dados hierárquicas. O componente IgcTreeComponent também fornece recursos de carga sob demanda, ativação de itens, seleção múltipla e em cascata de itens por meio de caixas de seleção integradas, navegação por teclado integrada e muito mais.

    Web Components Tree Example

    Neste exemplo básico de árvore Ignite UI for Web Components, você pode ver como definir uma árvore e seus itens especificando a hierarquia de itens.

    How to Use Ignite UI for Web Components Tree With Ignite UI

    Primeiro, você precisa instalar o Ignite UI for Web Components executando o seguinte comando:

    npm install igniteui-webcomponents
    

    Antes de usar o IgcTreeComponent, você precisa registrá-lo da seguinte forma:

    import { defineComponents, IgcTreeComponent } from 'igniteui-webcomponents';
    defineComponents(IgcTreeComponent);
    

    Para uma introdução completa ao Ignite UI for Web Components, leia o tópico Introdução.

    A maneira mais simples de começar a usar o IgcTreeComponent é a seguinte:

    Declaring a tree

    IgcTreeItemComponent é a representação de cada item que pertence ao IgcTreeComponent. Os itens fornecem propriedades disabled, active, selected e expanded, que lhe dão a oportunidade de configurar os estados do item conforme sua necessidade. A propriedade value pode ser usada para adicionar uma referência à entrada de dados que o item representa.

    Os itens podem ser declarados usando uma das seguintes abordagens.

    • Declarando a árvore e seus itens especificando a hierarquia de itens e iterando por meio de um conjunto de dados
    <igc-tree>
        ${data.map((x) => html`
            <igc-tree-item .value=${x} .expanded=${x.expanded} .label=${x.label}>
                  ${x.children.map((y) => html`
                      <igc-tree-item .value=${y} .expanded=${y.expanded}>
                          <span slot="label">${y.label}</slot>
                      </igc-tree-item>
                  `
            </igc-tree-item>
        `
    </igc-tree>
    

    Os itens podem ser vinculados a um modelo de dados para que seus estados expandidos e selecionados também sejam refletidos nos dados subjacentes.

    • Declarando uma árvore criando itens estáticos não vinculados

    Para renderizar uma árvore, você não precisa necessariamente de um conjunto de dados: itens individuais podem ser criados sem um modelo de dados subjacente usando a propriedade label exposta ou fornecer um conteúdo de slot personalizado para o rótulo IgcTreeItemComponent.

    <igc-tree>
        <igc-tree-item>
            <div slot="label">
                I am a parent item 1
    	        <img src="hard_coded_src.webb" alt="Alt Text">
            </div>
    	    <igc-tree-item label="I am a child item 1">
    	    </igc-tree-item>
        </igc-tree-item>
    
        <igc-tree-item>
            <div slot="label">
                I am a parent item 2
    	        <img src="hard_coded_src.webb" alt="Alt Text">
            </div>
    	    <igc-tree-item label="I am a child item 1">
    	    </igc-tree-item>
        </igc-tree-item>
    </igc-tree>
    

    [!Note] You can provide a custom slot content for each IgcTreeItemComponent's indentation, expansion and label area respectively using the provided indentation, indicator and label slots.

    Item Interactions

    IgcTreeItemComponent pode ser expandido ou recolhido:

    • clicando no indicador de expansão do item (comportamento padrão).
    • clicando no item se a propriedade IgcTreeComponent toggleNodeOnClick estiver definida como true.
    <igc-tree toggle-node-on-click="true">
        <igc-tree-item label="North America">
            <igc-tree-item label="United States"></igc-tree-item>
            <igc-tree-item label="Canada"></igc-tree-item>
            <igc-tree-item label="Mexico"></igc-tree-item>
        </igc-tree-item>
        <igc-tree-item label="South America">
            <igc-tree-item label="Brazil"></igc-tree-item>
        </igc-tree-item>
    </igc-tree>
    

    Por padrão, vários itens podem ser expandidos ao mesmo tempo. Para alterar esse comportamento e permitir a expansão de apenas uma ramificação por vez, a propriedade singleBranchExpand pode ser habilitada. Dessa forma, quando um item é expandido, todas as outras ramificações já expandidas no mesmo nível serão recolhidas.

    <igc-tree single-branch-expand="true">
        <igc-tree-item label="North America">
            <igc-tree-item label="United States"></igc-tree-item>
            <igc-tree-item label="Canada"></igc-tree-item>
            <igc-tree-item label="Mexico"></igc-tree-item>
        </igc-tree-item>
        <igc-tree-item label="South America">
            <igc-tree-item label="Brazil"></igc-tree-item>
        </igc-tree-item>
    </igc-tree>
    

    Além disso, o IgcTreeComponent fornece os seguintes métodos de API para interações de itens:

    • expand- expande todos os itens. Se um array de itens for passado, expande apenas os itens especificados.
    • collapse- recolhe todos os itens. Se um array items for passado, recolhe apenas os itens especificados.
    • IgcSelectComponent- seleciona todos os itens. Se um array de itens for passado, seleciona apenas os itens especificados. Não emite evento selection.
    • Tree.Deselect- desseleciona todos os itens. Se um array de itens for passado, desseleciona somente os itens especificados. Não emite evento selection.

    Web Components Tree Selection

    Para configurar a seleção de itens no componente Tree do Ignite UI for Web Components, você só precisa definir sua propriedade selection. Esta propriedade aceita os três modos a seguir: None, Multiple e Cascade. Abaixo, daremos uma olhada em cada um deles com mais detalhes.

    None

    No IgcTreeComponent, por padrão, a seleção de itens é desabilitada. Os usuários não podem selecionar ou desmarcar um item por meio da interação da IU, mas essas ações ainda podem ser concluídas por meio do método de API fornecido.

    Multiple

    Para habilitar a seleção de múltiplos itens no IgcTreeComponent, basta definir a propriedade selection como multiple. Isso renderizará uma caixa de seleção para cada item. Cada item tem dois estados - selecionado ou não. Este modo suporta seleção múltipla.

    <igc-tree selection="multiple">
    </igc-tree>
    

    Cascade

    Para habilitar a seleção de itens em cascata no IgcTreeComponent, basta definir a propriedade selection como cascade. Isso renderizará uma caixa de seleção para cada item.

    <igc-tree selection="Cascade">
    </igc-tree>
    

    Nesse modo, o estado de seleção de um pai depende inteiramente do estado de seleção de seus filhos. Quando um pai tem alguns filhos selecionados e alguns desmarcados, sua caixa de seleção está em um estado indeterminado.

    Keyboard Navigation

    A navegação por teclado no IgcTreeComponent fornece uma rica variedade de interações de teclado para o usuário. Essa funcionalidade é habilitada por padrão e permite que os usuários naveguem pelos itens.

    A navegação IgcTreeComponent é compatível com os padrões de acessibilidade do W3C e é fácil de usar.

    Combinações de teclas

    • - navega para o próximo item visível. Marca o item como ativo. Não faz nada se estiver no ÚLTIMO item.
    • Ctrl + - navega para o próximo item visível. Não faz nada se estiver no ÚLTIMO item.
    • - navega para o item visível anterior. Marca o item como ativo. Não faz nada se estiver no PRIMEIRO item.
    • Ctrl + - navega para o item visível anterior. Não faz nada se estiver no PRIMEIRO item.
    • - em um item pai expandido, o recolhe. Se o item estiver recolhido ou não tiver filhos, move para seu item pai. Não faz nada se não houver um item pai.
    • - em um item pai expandido, navega para o primeiro filho do item. Se em um item pai recolhido, expande-o. Não faz nada se o item não tiver filhos.
    • Início- navega para o PRIMEIRO item.
    • Fim- navega até o ÚLTIMO item visível.
    • Tab- navega para o próximo elemento focalizável na página, fora da árvore.
    • Shift + Tab- navega para o elemento focalizável anterior na página, fora da árvore.
    • Espaço- alterna a seleção do item atual. Marca o nó como ativo.
    • Shift + Espaço- alterna a seleção de todos os itens entre o ativo e o pressionado. Espaço enquanto segura Shift se a seleção estiver habilitada.
    • Enter- ativa o item em foco. Se o item tiver um link, abre o link.
    • *- expande o item e todos os itens irmãos no mesmo nível.

    Quando a seleção está habilitada, a seleção de itens pelo usuário final só é permitida por meio da caixa de seleção renderizada. Como ambos os tipos de seleção permitem seleção múltipla, as seguintes interações de mouse e teclado estão disponíveis:

    • Clique- quando executado na caixa de seleção do item, alterna a seleção do item se a seleção estiver habilitada. Caso contrário, foca o item
    • Shift + Clique- quando executado na caixa de seleção do item, alterna a seleção de todos os itens entre o ativo e o clicado enquanto mantém Shift pressionado se a seleção estiver habilitada

    Web Components Tree Load On Demand

    A Ignite UI for Web Components Tree pode ser renderizada de tal forma que exija a quantidade mínima de dados a serem recuperados do servidor para que o usuário possa vê-los o mais rápido possível. Com essa abordagem de carregamento dinâmico de dados, somente após o usuário expandir um item, os filhos para aquele item pai específico serão recuperados. Esse mecanismo, também conhecido como Load on Demand, pode ser facilmente configurado para funcionar com quaisquer dados remotos.

    Após o usuário clicar no ícone de expansão, ele é substituído por um indicador de carregamento. Quando a propriedade de carregamento é resolvida como false, o indicador de carregamento desaparece e os filhos são carregados.

    Você pode fornecer um conteúdo de slot personalizado para a área de carregamento usando o slot loadingIndicator. Se tal slot não for definido, o IgcCircularProgressComponent será usado.

    Load On Demand With Virtualization

    Carregar um número maior de filhos sob demanda na Ignite UI for Web Components Tree pode impactar negativamente o desempenho, já que os itens da árvore são definidos declarativamente pelo design. A demonstração a seguir mostra como a biblioteca @lit-labs/virtualizer pode ser usada para renderizar os itens da árvore filho em um contêiner virtualizado. O resultado é um desempenho aprimorado, já que apenas o pedaço visível dos filhos é renderizado no DOM.

    Styling

    You can change the appearance of the IgcTreeItemComponent, by using some of the exposed CSS parts listed below:

    Nome da peça Descrição
    wrapper O invólucro para o item da árvore.
    selected Indica o estado selecionado. Aplica-se awrapper.
    focused Indica estado focado. Aplica-se awrapper.
    active Indica um estado ativo. Aplica-se awrapper.
    indicator O indicador de expansão do item da árvore.
    label O conteúdo do item da árvore.
    text O item da árvore exibia texto.
    select A caixa de seleção do item da árvore quando a seleção está habilitada.

    Usando essas partes CSS, podemos personalizar a aparência do componente IgcTreeComponent assim:

    igc-tree-item::part(active) {
      background: var(--ig-secondary-500);
      color: var(--ig-secondary-500-contrast);
    }
    

    API References

    Additional Resources