Angular Tree Grid 구성 요소 개요

    Ignite UI for Angular 트리 그리드는 계층적 또는 평면적인 자기 참조 데이터를 표시하고 조작하는 데 사용됩니다. 코드를 거의 사용하지 않고 빠르게 데이터를 묶거나 다양한 이벤트를 사용해 다양한 동작을 맞춤화할 수 있습니다. 이 컴포넌트는 데이터 선택, 엑셀 스타일 필터링, 정렬, 페이징, 그룹화, 템플릿, 열 이동, 열 고정, 엑셀, CSV, PDF로의 내보내기 등 다양한 기능을 제공합니다.

    Angular Tree Grid Example

    이 예시에서 사용자가 계층적 데이터를 어떻게 표시할 수 있는지 볼 수 있습니다. 필터링 및 정렬 옵션, 고정 및 숨기기, 행 선택, 엑셀, csv, pdf로의 내보내기, 그리고 Sparkline 컴포넌트를 사용하는 셀 템플릿 기능을 포함했습니다. 또한, Angular 페이지네이션으로 커스텀 페이지네이션의 예시를 볼 수 있습니다.

    Getting Started with Ignite UI for Angular Tree Grid

    Ignite UI for Angular 트리 그리드 구성 요소를 시작하려면 먼저 Ignite UI for Angular를 설치해야 합니다. 기존 Angular 응용 프로그램에서 다음 명령을 입력합니다.

    ng add igniteui-angular
    

    Ignite UI for Angular에 대한 전체 소개는 시작 항목을 참조하십시오.

    다음 단계는 다음 단계를 가져오는 것입니다.IgxTreeGridModule 당신의 app.module.ts 파일.

    // app.module.ts
    
    import { IgxTreeGridModule } from 'igniteui-angular/grids/tree-grid';
    // import { IgxTreeGridModule } from '@infragistics/igniteui-angular'; for licensed package
    
    @NgModule({
        imports: [
            ...
            IgxTreeGridModule,
            ...
        ]
    })
    export class AppModule {}
    

    또는16.0.0 독립 실행형 의존성으로 가져오IgxTreeGridComponent 거나, 토큰을IGX_TREE_GRID_DIRECTIVES 사용해 컴포넌트와 그 지원 컴포넌트, 명령어를 가져올 수도 있습니다.

    // home.component.ts
    
    import { IGX_TREE_GRID_DIRECTIVES } from 'igniteui-angular/grids/tree-grid';
    // import { IGX_TREE_GRID_DIRECTIVES } from '@infragistics/igniteui-angular'; for licensed package
    
    @Component({
        selector: 'app-home',
        template: '<igx-tree-grid [data]="data"></igx-tree-grid>',
        styleUrls: ['home.component.scss'],
        standalone: true,
        imports: [IGX_TREE_GRID_DIRECTIVES]
        /* or imports: [IgxTreeGridComponent] */
    })
    export class HomeComponent {
        public data: Employee [];
    }
    

    이제 Ignite UI for Angular 트리 그리드 모듈이나 지시어를 가져왔으니 컴포넌트igx-tree-grid 사용을 시작할 수 있습니다.

    Using the Angular Tree Grid

    Note

    이 구성 요소는 다음을 활용할 수 있습니다.HammerModule 필요. 터치 상호작용이 기대대로 작동하도록 애플리케이션의 루트 모듈에서 가져올 수 있습니다..

    이 도구는IgxTreeGridComponent 많은 기능을IgxGridComponent 공유하지만, 데이터 계층 표시 기능도 추가했습니다. 이를IgxTreeGridComponent 위해 데이터 객체 간의 관계를 정의하는 몇 가지 방법을 제공하는데, 이는 모든 데이터 객체에 대해 자식 컬렉션을 사용하거나, 모든 데이터 객체에 대해 기본 키와 외래키를 사용하는 것입니다.

    Tree Cells

    트리 그리드의 계층 구조(하위 컬렉션 또는 기본 및 외래 키)를 구축하는 데 사용되는 옵션에 관계없이 트리 그리드의 행은 두 가지 유형의 셀로 구성됩니다.

    • IgxGridCell- 값을 포함하는 일반 셀.
    • IgxGridCell- 값, 확장/붕괴 표시기, 그리고 셀 행 수준에 기반한 들여쓰기 div 요소를 포함하는 트리 셀. 행 구성 요소의 레벨은 내부level 구성 요소의 속성을 통해treeRow 접근할 수 있습니다.
    Note

    각 행에는 하나의 트리 셀만 있을 수 있지만 일반 셀은 여러 개(또는 없음) 있을 수 있습니다.

    Initial Expansion Depth

    초기에는 트리 그리드가 모든 노드 레벨을 확장하고 보여줍니다. 이 동작은 속성을expansionDepth 사용하여 설정할 수 있습니다. 기본값으로 그 값은 무한대로, 모든 노드 레벨이 확장됩니다. 이 속성을 숫자 값으로 설정하여 초기 확장 깊이를 제어할 수 있습니다. 예를 들어, 0은 루트 레벨 노드만 보여주고, 1은 루트 레벨 노드와 그 자식 노드를 표시하는 식입니다.

    Child Collection

    자식 컬렉션 옵션을 사용할 때, 모든 데이터 객체는 자식 컬렉션을 포함하며, 이 컬렉션은 부모 데이터 객체와 동일한 유형의 항목들로 채워집니다. 이렇게 하면 트리 그리드의 모든 레코드가 자식 기록에 직접 참조가 됩니다. 이 경우 원래 데이터 소스를 포함하는 트리 그리드의 속성은data 계층적으로 정의된 컬렉션이 됩니다.

    이 샘플에서는 다음 컬렉션 구조를 사용해 보겠습니다.

    // Sample Employee Data
    
    export const EMPLOYEE_DATA = [
        {
            Name: "Johnathan Winchester",
            ID: 1,
            HireDate: new Date(2008, 3, 20),
            Age: 55,
            Employees: [
                {
                    Name: "Michael Burke",
                    ID: 3,
                    HireDate: new Date(2011, 6, 3),
                    Age: 43,
                    Employees: []
                },
                {
                    Name: "Thomas Anderson"
                    ID: 2,
                    HireDate: new Date(2009, 6, 19),
                    Age: 29,
                    Employees: []
                },
                ...
            ]
        },
        ...
    ]
    

    이제 데이터 컬렉션을 가져오고 트리 그리드의 입력에data 바인딩하는 것부터 시작하겠습니다.

    <!--treeGridSample.component.html-->
    
    <igx-tree-grid #treeGrid [data]="localData">
    </igx-tree-grid>
    

    IgxTreeGridComponent가 계층 구조를 구축하려면, 각 데이터 객체에 사용되는 자식 컬렉션 이름을 속성으로 설정childDataKey 해야 합니다. 저희 경우에는 직원 컬렉션이 될 것입니다. 또한, 자동 열 생성을 비활성화하고, 데이터 객체의 실제 속성과 일치하여 수동으로 정의할 것입니다. (Employees 컬렉션은 계층 구조에 자동으로 사용되므로 열의 정의에 포함될 필요가 없습니다.)

    <!--treeGridSample.component.html-->
    
    <igx-tree-grid #treeGrid [data]="localData" childDataKey="Employees"
                   [autoGenerate]="false">
        <igx-column field="Name" dataType="string"></igx-column>
        <igx-column field="HireDate" dataType="date"></igx-column>
        <igx-column field="Age" dataType="number"></igx-column>
    </igx-tree-grid>
    

    이제 와rowSelection 속성을 사용하여paging 트리 그리드의 행 선택 및 페이지 기능을 활성화할 것입니다. 첫 번째 열의 요약 기능과 각 열의 필터링, 정렬, 편집, 이동 및 크기 조절 기능도 활성화할 예정입니다.

    <!--treeGridSample.component.html-->
    
    <igx-tree-grid #treeGrid [data]="localData" childDataKey="Employees"
                   [autoGenerate]="false" [rowSelection]="'multiple'" [allowFiltering]="true" [moving]="true">
        <igx-column field="Name" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"
                    [hasSummary]="true"></igx-column>
        <igx-column field="HireDate" dataType="date" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-column field="Age" dataType="number" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-paginator>
        </igx-paginator>
    </igx-tree-grid>
    

    마지막으로, 트리 그리드의 툴바와 함께 열의 숨기기, 열을 고정하는 기능IgxGridToolbarComponentIgxGridToolbarHidingComponentIgxGridToolbarPinningComponentIgxGridToolbarExporterComponent, 그리고 각각 ', ', '

    <!--treeGridSample.component.html-->
    
    <igx-tree-grid #treeGrid [data]="localData" childDataKey="Employees"
                   [autoGenerate]="false" [rowSelection]="'multiple'" [allowFiltering]="true" [moving]="true">
        <igx-grid-toolbar>
                <igx-grid-toolbar-title>Employees</igx-grid-toolbar-title>
                <igx-grid-toolbar-actions>
                    <igx-grid-toolbar-hiding></igx-grid-toolbar-hiding>
                    <igx-grid-toolbar-pinning></igx-grid-toolbar-pinning>
                    <igx-grid-toolbar-exporter></igx-grid-toolbar-exporter>
                </igx-grid-toolbar-actions>
        </igx-grid-toolbar>
        <igx-column field="Name" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-column field="HireDate" dataType="date" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-column field="Age" dataType="number" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-paginator [perPage]="6">
        </igx-paginator>
    </igx-tree-grid>
    

    이 글의 시작부분에 있는 Angular Tree Grid Example 섹션에서 위 코드의 결과를 볼 수 있습니다.

    Primary and Foreign keys

    기본 키와 외래 키 옵션을 사용할 때, 모든 데이터 객체는 기본 키와 외래 키를 포함합니다. 기본 키는 현재 데이터 객체의 고유 식별자이고, 외래 키는 그 부모 객체의 고유 식별자입니다. 이 경우 원래 데이터 소스를 포함하는 트리 그리드의 속성은data 평면 집합이 됩니다.

    다음은 기본 키와 외래 키 관계로 정의된 단순 컬렉션을 포함하는 구성 요소의 예입니다.

    // treeGridSample.component.ts
    
    @Component({...})
    export class MyComponent implements OnInit {
    
        public data: any[];
    
        constructor() { }
    
        public ngOnInit() {
            // Primary and Foreign keys sample data
            this.data = [
                { ID: 1, ParentID: -1, Name: "Casey Houston", JobTitle: "Vice President", Age: 32 },
                { ID: 2, ParentID: 1, Name: "Gilberto Todd", JobTitle: "Director", Age: 41 },
                { ID: 3, ParentID: 2, Name: "Tanya Bennett", JobTitle: "Director", Age: 29 },
                { ID: 4, ParentID: 2, Name: "Jack Simon", JobTitle: "Software Developer", Age: 33 },
                { ID: 5, ParentID: 8, Name: "Celia Martinez", JobTitle: "Senior Software Developer", Age: 44 },
                { ID: 6, ParentID: -1, Name: "Erma Walsh", JobTitle: "CEO", Age: 52 },
                { ID: 7, ParentID: 2, Name: "Debra Morton", JobTitle: "Associate Software Developer", Age: 35 },
                { ID: 8, ParentID: 10, Name: "Erika Wells", JobTitle: "Software Development Team Lead", Age: 50 },
                { ID: 9, ParentID: 8, Name: "Leslie Hansen", JobTitle: "Associate Software Developer", Age: 28 },
                { ID: 10, ParentID: -1, Name: "Eduardo Ramirez", JobTitle: "Development Manager", Age: 53 }
            ];
        }
    }
    

    위의 샘플 데이터에서 모든 레코드에는 ID, ParentID 및 이름, JobTitle 및 Age와 같은 일부 추가 속성이 있습니다. 앞서 언급했듯이 레코드 ID는 고유해야 합니다. ParentID에는 상위 노드의 ID가 포함됩니다. 행에 트리 그리드의 어떤 행과도 일치하지 않는 ParentID가 있는 경우 이는 이 행이 루트 행임을 의미합니다.

    부모-자식 관계는 트리 그리드primaryKeyforeignKey 속성을 사용하여 구성됩니다.

    다음은 위의 플랫 컬렉션에 정의된 데이터를 표시하도록 트리 그리드를 구성하는 방법을 보여주는 구성 요소의 템플릿입니다.

    <!--treeGridSample.component.html-->
    
    <igx-tree-grid #treeGrid [data]="data" primaryKey="ID" foreignKey="ParentID"
        [autoGenerate]="false">
        <igx-column field="Name" dataType="string"></igx-column>
        <igx-column field="JobTitle" dataType="string"></igx-column>
        <igx-column field="Age" dataType="number"></igx-column>
    </igx-tree-grid>
    

    또한, 트리 그리드rowSelection의 행 선택 기능과 각 열의 필터링, 정렬, 편집, 이동 및 크기 조정 기능을 활성화할 예정입니다.

    <!--treeGridSample.component.html-->
    
    <igx-tree-grid #treeGrid [data]="data" primaryKey="ID" foreignKey="ParentID"
        [autoGenerate]="false" [rowSelection]="'multiple'" [allowFiltering]="true" [moving]="true">
        <igx-column field="Name" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-column field="JobTitle" dataType="string" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
        <igx-column field="Age" dataType="number" [sortable]="true" [editable]="true" [resizable]="true"></igx-column>
    </igx-tree-grid>
    

    최종 결과는 다음과 같습니다.

    Persistence and Integration

    트리 셀의 들여쓰기는 필터링, 정렬, 페이징과 같은 다른 트리 그리드 기능 전반에 걸쳐 유지됩니다.

    • 열에 정렬이 적용되면 데이터 행이 수준별로 정렬됩니다. 즉, 루트 수준 행은 해당 하위 항목과 독립적으로 정렬됩니다. 각각의 하위 컬렉션도 각각 독립적으로 정렬됩니다.
    • 첫 번째 열(avisibleIndex가 0인 열)은 항상 트리 열입니다.
    • 열 고정, 열 숨기기, 열 이동 같은 연산 후 avisibleIndex가 0이 되는 열은 트리 열이 됩니다.
    • 내보낸 Excel 워크시트는 트리 그리드 자체에 그룹화된 레코드를 그룹화하여 계층 구조를 반영합니다. 모든 레코드 확장 상태도 유지되고 반영됩니다.
    • CSV로 내보낼 때 레벨 및 확장 상태가 무시되고 모든 데이터가 플랫으로 내보내집니다.

    Angular Tree Grid Sizing

    그리드 크기 조정 항목을 참조하세요.

    스타일링

    트리 그리드는 스타일링을 가능하게 합니다.Ignite UI for Angular Theme Library 트리 그리드는grid-theme 다양한 속성을 노출시켜 트리 그리드의 모든 기능을 맞춤화할 수 있게 합니다.

    트리 그리드 스타일링을 시작하려면, 모든 테마 함수와 컴포넌트 믹스인이 있는 파일을 가져와index야 합니다:

    @use "igniteui-angular/theming" as *;
    
    // IMPORTANT: Prior to Ignite UI for Angular version 13 use:
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    

    가장 간단한 방법을 따라, 트리 그리드를 원하는 대로 커스터마이즈하는 데 필요한 매개변수를 확장grid-theme 하고 이를 받아들이는 새로운 테마를 만듭니다.

    Note

    특정한sass 트리 그리드 함수는 없습니다.

    $custom-theme: grid-theme(
      $cell-active-border-color: #ffcd0f,
      $cell-selected-background: #6f6f6f,
      $row-hover-background: #f8e495,
      $row-selected-background: #8d8d8d,
      $header-background: #494949,
      $header-text-color: #fff,
      $expand-icon-color: #ffcd0f,
      $expand-icon-hover-color: #e0b710,
      $resize-line-color: #ffcd0f,
      $row-highlight: #ffcd0f
    );
    
    Note

    우리가 방금 한 것처럼 색상 값을 하드코딩하는 대신, andpalette 함수를 사용color 해 색상 측면에서 더 큰 유연성을 얻을 수 있습니다. 사용 방법에 대한 자세한 안내는 해당 주제를 참고Palettes 해 주세요.

    마지막 단계는 애플리케이션에 구성 요소 테마를 포함하는 것입니다.

    @include css-vars($custom-theme);
    

    Angular Tree Grid Styling Demo

    Note

    샘플은 선택된 글로벌 테마Change Theme의 영향을 받지 않습니다.

    Performance (Experimental)

    TheigxTreeGrid의 설계는 Angular 도입된 이벤트 응집 기능을 활용할 수 있게 해줍니다. 이 기능은 상호작용과 반응성 면에서 대략 더20% 나은 성능을 제공합니다. 이 기능은 메서드에서ngZoneEventCoalescingngZoneRunCoalescing 속성을true 단순히 설정bootstrapModule 하여 애플리케이션 수준에서 활성화할 수 있습니다:

    platformBrowserDynamic()
      .bootstrapModule(AppModule, { ngZoneEventCoalescing: true, ngZoneRunCoalescing: true })
      .catch(err => console.error(err));
    
    Note

    이것은 아직 실험 단계에 있습니다.igxTreeGrid 이는 트리 그리드에서 예상치 못한 동작이 있을 수 있음을 의미합니다. 이런 현상이 발생하면 저희 깃허브 페이지에서 연락해 주세요.

    Note

    활성화하면 관련 없는 Angular 애플리케이션igxTreeGrid의 다른 부분에 영향을 줄 수 있습니다.

    Known Limitations

    한정 설명
    트리 셀 템플릿 트리 셀을 템플릿으로 만들 때 셀 경계 외부에 있는 콘텐츠는 오버레이에 배치되지 않는 한 표시되지 않습니다.
    그룹화 기준 그룹화 기준 기능은 트리 그리드에 내재되어 있으므로 지원되지 않습니다.
    Note

    트리 그리드의 깊이 제한은 25개 수준입니다. 더 많은 레벨을 지원하려면 애플리케이션에 사용자 정의 CSS 클래스를 추가해야 합니다. 아래에서 이러한 CSS 클래스의 예를 볼 수 있습니다.

    .igx-grid__tree-cell--padding-level-26 {
        padding-left: 39rem;
    }
    
    Note

    igxTreeGrid내부적으로 지시를 사용igxForOf 하므로 모든igxForOf 제한은 유효igxTreeGrid 합니다. 자세한 내용은 igxForOf Known Issues 섹션을 참조하세요.

    API References

    Theming Dependencies

    Additional Resources

    우리 커뮤니티는 활동적이며 항상 새로운 아이디어를 환영합니다.