Web Components 트리 개요

    TreeView 구성 요소라고도 하는 Ignite UI for Web Components 트리와 같은 UI 내에서 확장 가능한 데이터 구조를 시각화하여 하위 항목에 대한 요청 시 로드를 적용할 수 있게 해주는 고성능 컨트롤입니다. Ignite UI for Web Components 노드 확장 및 축소, 중첩된 앱 탐색, 수동으로 또는 바인딩된 데이터 소스에서 생성할 수 있는 Ignite UI for Web Components와 같은 기능도 제공합니다.

    최종 사용자의 경우 이는 다양한 앱 페이지를 쉽게 탐색하고, 선택 항목, 확인란을 사용하고, 텍스트, 아이콘, 이미지 등을 추가할 수 있음을 의미합니다.

    Ignite UI for Web Components 사용하면 사용자는 트리 보기 구조로 계층적 데이터를 표현하고 상위-하위 관계를 유지할 수 있을 뿐만 아니라 해당 데이터 모델 없이 정적 트리 보기 구조를 정의할 수 있습니다. 주요 목적은 최종 사용자가 계층적 데이터 구조 내에서 시각화하고 탐색할 수 있도록 하는 것입니다. IgcTreeComponent 구성 요소는 또한 내장된 확인란, 내장된 키보드 탐색 등을 통해 요청 시 로드 기능, 항목 활성화, 다중 및 계단식 항목 선택을 제공합니다.

    Web Components Tree Example

    이 기본 Ignite UI for Web Components 예제에서는 항목 계층 구조를 지정하여 트리와 해당 항목을 정의하는 방법을 볼 수 있습니다.

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

    먼저 다음 명령을 실행하여 Ignite UI for Web Components 설치해야 합니다.

    npm install igniteui-webcomponents
    

    IgcTreeComponent를 사용하기 전에 다음과 같이 등록해야 합니다.

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

    Ignite UI for Web Components 에 대한 전체 소개는 시작 항목을 참조하세요.

    IgcTreeComponent 사용을 시작하는 가장 간단한 방법은 다음과 같습니다.

    Declaring a tree

    IgcTreeItemComponent에 속한 IgcTreeComponent 모든 항목의 표현입니다. 항목은 요구 사항에 따라 항목의 상태를 구성할 수 있는 기회를 제공하는 속성을 제공합니다 disabled​ ​selected​ ​active​ ​expanded. 이 value 속성은 항목이 나타내는 데이터 항목에 대한 참조를 추가하는 데 사용할 수 있습니다.

    항목은 다음 방법 중 하나를 사용하여 선언할 수 있습니다.

    • 항목 계층 구조를 지정하고 데이터 세트를 반복하여 트리와 해당 항목 선언
    <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>
    

    항목의 확장 및 선택 상태가 기본 데이터에도 반영되도록 항목을 데이터 모델에 바인딩할 수 있습니다.

    • 바인딩되지 않은 정적 항목을 생성하여 트리 선언

    트리를 렌더링하기 위해 반드시 데이터 세트가 필요한 것은 아닙니다 - 노출 label 된 속성을 사용하여 기본 데이터 모델 없이 개별 항목을 만들거나 레이블에 대한 사용자 지정 슬롯 콘텐츠를 제공할 수 있습니다 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 확장되거나 축소될 수 있습니다.

    • 항목을 클릭하여 확장 표시기 (기본 동작).
    • 항목을 클릭하면 IgcTreeComponent toggleNodeOnClick 속성이 로 설정되어 있는지 확인합니다 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>
    

    기본적으로 여러 항목을 동시에 확장할 수 있습니다. 이 동작을 변경하고 한 번에 singleBranchExpand 하나의 분기만 확장할 수 있도록 하려면 속성을 사용하도록 설정할 수 있습니다. 이렇게 하면 항목이 확장될 때 동일한 수준에서 이미 확장된 다른 모든 분기가 축소됩니다.

    <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>
    

    또한 IgcTreeComponent 항목 상호 작용에 대해 다음과 같은 API 메서드를 제공합니다.

    • expand- 모든 항목을 확장합니다. items 배열이 전달되면 지정된 항목만 확장합니다.
    • collapse- 모든 항목을 축소합니다. items 배열이 전달되면 지정된 항목만 축소합니다.
    • select- 모든 항목을 선택합니다. items 배열이 전달되면 지정된 항목만 선택합니다. 이벤트를 내보내 selection 지 않습니다.
    • deselect- 모든 항목을 선택 취소합니다. items 배열이 전달되면 지정된 항목만 선택 취소합니다. 이벤트를 내보내 selection 지 않습니다.

    Web Components Tree Selection

    Ignite UI for Web Components 트리 구성 요소에서 항목 선택을 설정하려면 해당 속성을 설정하기만 하면 됩니다 selection. 이 속성은 None, MultipleCascade의 세 가지 모드를 허용합니다. 아래에서 각각에 대해 자세히 살펴보겠습니다.

    None

    IgcTreeComponent 에서는 기본적으로 항목 선택이 비활성화되어 있습니다. 사용자는 UI 상호 작용을 통해 항목을 선택하거나 선택 취소할 수 없지만 제공된 API 메서드를 통해 이러한 작업을 완료할 수 있습니다.

    Multiple

    에서 여러 항목을 선택할 수 있도록 하려면 IgcTreeComponent 그냥 설정하기만 하면 됩니다. selection property 를 배수. 이렇게 하면 모든 항목에 대한 확인란이 렌더링됩니다. 각 항목에는 선택되거나 선택되지 않은 두 가지 상태가 있습니다. 이 모드는 다중 선택을 지원합니다.

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

    Cascade

    IgcTreeComponent에서 계단식 항목 선택을 활성화하려면 선택 속성을 cascade로 설정하면 됩니다. 그러면 모든 항목에 대한 확인란이 렌더링됩니다.

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

    이 모드에서 부모의 선택 상태는 전적으로 자식의 선택 상태에 따라 달라집니다. 부모에 선택된 자식과 선택 취소된 자식이 있는 경우 해당 확인란은 확정되지 않은 상태입니다.

    Keyboard Navigation

    IgcTreeComponent의 키보드 탐색은 사용자에게 다양한 키보드 상호 작용을 제공합니다. 이 기능은 기본적으로 활성화되어 있으며 사용자가 항목을 탐색할 수 있도록 합니다.

    IgcTreeComponent 탐색은 W3C 접근성 표준을 준수하며 사용이 편리합니다.

    주요 조합

    • - 표시되는 다음 항목으로 이동합니다. 항목을 활성으로 표시합니다. 마지막 항목인 경우 아무 작업도 수행하지 않습니다.
    • Ctrl + - 표시되는 다음 항목으로 이동합니다. 마지막 항목인 경우 아무 작업도 수행하지 않습니다.
    • - 이전에 표시된 항목으로 이동합니다. 항목을 활성으로 표시합니다. 첫 번째 항목인 경우 아무 작업도 수행하지 않습니다.
    • Ctrl + - 표시된 이전 항목으로 이동합니다. 첫 번째 항목인 경우 아무 작업도 수행하지 않습니다.
    • - 확장된 상위 항목에서는 해당 항목을 축소합니다. 항목이 축소되었거나 하위 항목이 없으면 상위 항목으로 이동합니다. 상위 항목이 없으면 아무 작업도 수행하지 않습니다.
    • - 확장된 상위 항목에서 항목의 첫 번째 하위 항목으로 이동합니다. 접힌 상위 항목에 있는 경우 확장합니다. 항목에 하위 항목이 없으면 아무 작업도 수행하지 않습니다.
    • - 첫 번째 항목으로 이동합니다.
    • - 마지막으로 표시된 항목으로 이동합니다.
    • - 트리 외부의 페이지에서 포커스를 받을 수 있는 다음 요소로 이동합니다.
    • Shift + Tab- 트리 외부의 페이지에서 초점을 맞출 수 있는 이전 요소로 이동합니다.
    • 스페이스- 현재 항목 선택을 전환합니다. 노드를 활성으로 표시합니다.
    • Shift + Space- 선택이 활성화된 경우 Shift를 누른 상태에서 활성 항목과 Space를 누른 항목 사이의 모든 항목 선택을 전환합니다.
    • Enter- 초점이 맞춰진 항목을 활성화합니다. 항목에 링크가 있으면 링크를 엽니다.
    • *- 항목과 같은 수준의 모든 형제 항목을 확장합니다.

    선택이 활성화되면 최종 사용자의 항목 선택은 렌더링된 확인란을 통해서만 허용됩니다. 두 선택 유형 모두 다중 선택을 허용하므로 다음과 같은 마우스 및 키보드 상호 작용을 사용할 수 있습니다.

    • 클릭- 항목 확인란을 수행할 때 선택이 활성화된 경우 항목 선택을 전환합니다. 그렇지 않으면 항목에 초점을 맞춥니다.
    • Shift + 클릭- 항목 확인란을 수행할 때 활성 항목과 선택이 활성화된 경우 Shift를 누른 상태에서 클릭한 항목 사이의 모든 항목 선택을 전환합니다.

    Web Components Tree Load On Demand

    Ignite UI for Web Components 사용자가 가능한 한 빨리 볼 수 있도록 서버에서 검색할 데이터의 양을 최소화하는 방식으로 렌더링될 수 있습니다. 이 동적 데이터 로드 접근 방식을 사용하면 사용자가 항목을 확장한 후에만 해당 특정 상위 항목의 하위 항목이 검색됩니다. 요청 시 로드라고도 하는 이 메커니즘은 모든 원격 데이터에 대해 작동하도록 쉽게 구성할 수 있습니다.

    사용자가 확장 아이콘을 클릭하면 로딩 표시기로 대체됩니다. 로딩 속성이 false로 확인되면 로딩 표시기가 사라지고 자식이 로드됩니다.

    loadingIndicator 슬롯을 사용하여 로딩 영역에 대한 사용자 정의 슬롯 콘텐츠를 제공할 수 있습니다. 해당 슬롯이 정의되지 않은 경우 IgcCircularProgressComponent가 사용됩니다.

    Load On Demand With Virtualization

    Ignite UI for Web Components에서 요청 시 더 많은 수의 하위 항목을 로드하면 트리 항목이 디자인에 따라 선언적으로 정의되므로 성능에 부정적인 영향을 미칠 수 있습니다. 다음 데모에서는 @lit-labs/virtualizer 라이브러리를 사용하여 가상화된 컨테이너에서 하위 트리 항목을 렌더링하는 방법을 보여줍니다. 결과적으로 보이는 자식 덩어리만 DOM에서 렌더링되므로 성능이 향상됩니다.

    Styling

    아래 나열된 노출된 CSS 부분 중 일부를 사용하여 IgcTreeItemComponent의 모양을 변경할 수 있습니다.

    부품명 설명
    wrapper 나무 항목의 래퍼입니다.
    selected 선택된 상태를 나타냅니다. 적용대상wrapper.
    focused 집중된 상태를 나타냅니다. 적용대상wrapper.
    active 활성 상태를 나타냅니다. 적용대상wrapper.
    indicator 트리 항목의 확장 표시기입니다.
    label 트리 항목 콘텐츠입니다.
    text 트리 항목에 텍스트가 표시되었습니다.
    select 선택이 활성화된 경우 트리 항목의 확인란입니다.

    이러한 CSS 부분을 사용하여 다음과 같이 IgcTreeComponent 구성 요소의 모양을 사용자 정의할 수 있습니다.

    igc-tree-item::part(active) {
        background: #ecaa53;
    }
    
    igc-tree-item::part(selected) {
        background: #ffe6cc;
    }
    
    igc-tree-item::part(active selected) {
        background: #ff8c1a;
        color: white;
    }
    

    API References

    Additional Resources