Angular 그리드 상태 지속성

    igxGridState 지시문을 사용하면 개발자가 그리드 상태를 쉽게 저장하고 복원할 수 있습니다. IgxGridState 지시문이 그리드에 적용되면 개발자가 모든 시나리오에서 상태 지속성을 달성하는 데 사용할 수 있는 getStatesetState 메서드가 노출됩니다.

    Supported Features

    IgxGridState 지시문은 다음 기능의 상태 저장 및 복원을 지원합니다.

    • Sorting
    • Filtering
    • Advanced Filtering
    • Paging
    • Cell Selection
    • Row Selection
    • Column Selection
    • Row Pinning
    • Expansion
    • GroupBy
    • Columns
      • NEW: 이제 다중 열 헤더가 기본적으로 지원됩니다.
      • 열 순서
      • IColumnState 인터페이스에 의해 정의된 열 속성입니다.
      • 열 템플릿 및 함수는 애플리케이션 수준 코드를 사용하여 복원됩니다. 열 복원 섹션을 참조하세요.
    Note

    IgxGridState 지시어는 템플릿을 처리하지 않습니다. 열 템플릿을 복원하는 방법을 보려면 열 복원 섹션으로 이동하세요.

    Usage

    getState- 이 방법은 직렬화된 JSON 문자열로 그리드 상태를 반환하므로 개발자는 이를 가져와 모든 데이터 저장소(데이터베이스, 클라우드, 브라우저 localStorage 등)에 저장할 수 있습니다. 이 메소드는 첫 번째 선택적 매개변수를 허용합니다. serialize, 여부를 결정합니다. getState 반환합니다 IGridState 객체 또는 직렬화된 JSON 문자열. 개발자는 기능 이름 또는 기능 이름이 포함된 배열을 두 번째 인수로 전달하여 특정 기능에 대한 상태만 가져오도록 선택할 수 있습니다.

    // get all features` state in a serialized JSON string
    const gridState = state.getState();
    
    // get an `IGridState` object, containing all features original state objects, as returned by the grid public API
    const gridState: IGridState = state.getState(false);
    
    // get the sorting and filtering expressions
    const sortingFilteringStates: IGridState = state.getState(false, ['sorting', 'filtering']);
    

    setState-setState 메소드는 직렬화된 JSON 문자열 또는 IGridState 객체를 인수로 받아들이고 객체/JSON 문자열에 있는 각 기능의 상태를 복원합니다.

    state.setState(gridState);
    state.setState(sortingFilteringStates)
    

    options-options 개체는 IGridStateOptions 인터페이스를 구현합니다. 즉, 특정 기능의 이름인 모든 키에 대해 이 기능 상태가 추적되는지 여부를 나타내는 부울 값이 있습니다. getState 메소드는 이러한 기능의 상태를 반환된 값에 넣지 않으며 setState 메소드는 해당 기능의 상태를 복원하지 않습니다.

    public options =  { cellSelection: false; sorting: false; }
    
    <igx-grid [igxGridState]="options"></igx-grid>
    

    사용하기 쉬운 단일 지점 API를 사용하면 단 몇 줄의 코드만으로 전체 상태 지속성 기능을 달성할 수 있습니다. 아래 코드를 복사하여 붙여넣으세요. 사용자가 현재 페이지를 떠날 때마다 브라우저 sessionStorage 객체에 그리드 상태가 저장됩니다. 사용자가 메인 페이지로 돌아갈 때마다 그리드 상태가 복원됩니다. 원하는 데이터를 얻기 위해 매번 복잡한 고급 필터링 및 정렬 표현식을 구성할 필요가 없습니다. 한 번만 수행하면 아래 코드가 사용자를 위해 나머지 작업을 수행하게 됩니다.

    // app.component.ts
    @ViewChild(IgxGridStateDirective, { static: true })
    public state!: IgxGridStateDirective;
    
    public ngOnInit() {
        this.router.events.pipe(take(1)).subscribe((event: NavigationStart) => {
            this.saveGridState();
        });
    }
    
    public ngAfterViewInit() {
        this.restoreGridState();
    }
    
    public saveGridState() {
        const state = this.state.getState() as string;
        window.sessionStorage.setItem('grid1-state', state);
    }
    
    public restoreGridState() {
        const state = window.sessionStorage.getItem('grid1-state');
        this.state.setState(state);
    }
    

    Restoring columns

    IgxGridState 기본적으로 열 템플릿, 열 포맷터 등을 유지하지 않습니다(limitations 참조). 이들 중 하나를 복원하는 것은 애플리케이션 수준의 코드를 사용하여 수행할 수 있습니다. 템플릿 열에 대해 이 작업을 수행하는 방법을 살펴보겠습니다.

    1. 템플릿 참조 변수(아래 예에서는 #activeTemplate)를 정의하고 columnInit 이벤트에 대한 이벤트 핸들러를 할당합니다.
    <igx-grid id="grid" #grid igxGridState (columnInit)="onColumnInit($event)">
        <igx-column [field]="'IsActive'" header="IsActive">
            <ng-template igxCell #activeTemplate let-column let-val="val">
                <igx-checkbox [checked]="val"></igx-checkbox>
            </ng-template>
        </igx-column>
        ...
    </igx-grid>
    
    1. @ViewChild 또는 @ViewChildren 데코레이터를 사용하여 구성 요소의 템플릿 보기를 쿼리합니다. columnInit 이벤트 핸들러에서 템플릿을 열 bodyTemplate 속성에 할당합니다.
    @ViewChild('activeTemplate', { static: true }) public activeTemplate: TemplateRef<any>;
    public onColumnInit(column: IgxColumnComponent) {
        if (column.field === 'IsActive') {
            column.bodyTemplate = this.activeTemplate;
            column.summaries = MySummary;
            column.filters = IgxNumberFilteringOperand.instance();
        }
    }
    

    Demo

    Restoring Strategies

    IgxGridState 기본적으로 원격 작업이나 사용자 정의 차원 전략(자세한 내용은 그리드 원격 작업 샘플 참조)을 유지하지 않습니다(limitations 참조). 이들 중 하나를 복원하는 것은 애플리케이션 수준의 코드를 사용하여 수행할 수 있습니다. IgxGridState는 그리드 상태가 적용되기 전에 추가로 수정하는 데 사용할 수 있는 stateParsed 라는 이벤트를 노출합니다. 이를 수행하는 방법을 보여드리겠습니다.

    Note

    stateParsed는 문자열 인수와 함께 setState 사용할 때만 방출됩니다.

    • 사용자 정의 정렬 전략과 사용자 정의 열 및 행 차원 전략을 설정합니다.
    <igx-grid #grid 
              [data]="data" 
              [igxGridState]="options" 
              [sortStrategy]="customStrategy"
              [height]="'500px'">
    </igx-grid>
    
    @ViewChild(IgxGridStateDirective, { static: true })
    public state!: IgxGridStateDirective;
    
    public customStrategy = NoopSortingStrategy.instance();
    public options: IGridStateOptions = {...};
    
    • sessionStorage에서 상태를 복원하고 사용자 정의 전략을 적용하는 것은 다음과 같습니다.
    public restoreState() {
        const state = window.sessionStorage.getItem('grid-state');
        this.state.stateParsed.pipe(take(1)).subscribe(parsedState => {
            parsedState.sorting.forEach(x => x.strategy = NoopSortingStrategy.instance());
        });
        this.state.setState(state as string);
    }
    

    Limitations

    API References

    Additional Resources