Angular 그리드 키보드 탐색

    IgxGrid의 키보드 탐색은 사용자에게 다양한 키보드 상호 작용을 제공합니다. IgxGrid의 접근성을 향상하고 내부의 모든 유형의 요소(셀, 행, 열 머리글, 도구 모음, 바닥글 등)를 탐색할 수 있습니다. 이 기능은 기본적으로 활성화되어 있으며 개발자는 기본 동작을 쉽게 재정의할 수 있습니다.

    탐색이 W3C 접근성 표준을 준수하고 사용하기 편리하도록 IgxGrid의 표가 줄어들었습니다.

    현재 IgxGrid에는 다음 탭 정지가 도입되었습니다.

    • GroupBy 또는 도구 모음 영역 (활성화된 경우)
    • IgxGrid 헤더;
    • IgxGrid 본체;
    • 열 요약 (활성화된 경우)
    • IgxGrid 페이지네이터 (활성화된 경우)
    Note

    이러한 변경으로 인해 IgxGrid에서는 TabShift + Tab을 사용한 셀 간 탐색이 더 이상 지원되지 않습니다. 이제 Tab 키를 누르면 GroupBy / Toolbar-> Headers-> Body-> Summaries-> Footer / Paginator 순서로 탭 정지가 진행됩니다.

    Note

    템플릿을 통해 포커스 가능한 요소를 IgxGrid 본문에 노출하면 기본 브라우저 동작이 방지되지 않으므로 키보드 탐색에 부작용이 발생할 수 있습니다. 이를 적절하게 방지하거나 수정하는 것은 개발자의 책임입니다.

    Header Navigation

    전체 키보드 탐색에서 지원 IgxGrid 이제 헤더가 도입되었습니다. 열 머리글은 화살표 키를 사용하여 쉽게 이동할 수 있습니다. 또한 다음과 같이 열에 대한 작업을 트리거하는 여러 가지 키 조합이 있습니다. 필터링, 정렬, 그룹화 등등. IgxGrid 헤더 컨테이너에 초점이 맞춰지면 다음 키 조합을 사용할 수 있습니다.

    Key Combinations

    • 위쪽 화살표는 머리글에서 한 셀 위로 이동합니다(반복 없음). 다중 행 레이아웃(MRL) 또는 다중 열 헤더(MCH)가 정의된 경우에만 사용할 수 있습니다.
    • 아래쪽 화살표는 헤더에서 한 셀 아래로 이동합니다(줄 바꿈 없음). 다중 행 레이아웃(MRL) 또는 다중 열 헤더(MCH)가 정의된 경우에만 사용할 수 있습니다.
    • 왼쪽 화살표는 한 셀 왼쪽으로 이동합니다(반복 없음).
    • 오른쪽 화살표는 한 셀 오른쪽으로 이동합니다(줄 바꿈 없음).
    • Ctrl + 왼쪽 화살표는 행의 가장 왼쪽 셀로 이동합니다. MRL 또는 MCH가 활성화된 경우 동일한 수준의 가장 왼쪽 셀로 이동합니다.
    • 홈은 행의 가장 왼쪽 셀로 이동합니다. MRL 또는 MCH가 활성화된 경우 동일한 수준의 가장 왼쪽 셀로 이동합니다.
    • Ctrl + 오른쪽 화살표는 행의 가장 오른쪽 셀로 이동합니다. MRL 또는 MCH가 활성화된 경우 동일한 수준의 가장 오른쪽 셀로 이동합니다.
    • End는 행의 가장 오른쪽 셀로 이동합니다. MRL 또는 MCH가 활성화된 경우 동일한 수준의 가장 오른쪽 셀로 이동합니다.
    • 고급 필터링이 활성화된 경우 Alt + L은 고급 필터링 대화 상자를 엽니다.
    • Ctrl + Shift + L은 Excel 스타일 필터 대화 상자를 열거나 열을 필터링할 수 있는 경우 기본(행) 필터를 엽니다.
    • Ctrl + 위쪽 화살표는 활성 열 머리글을 ASC 순서로 정렬합니다. 열이 이미 ASC로 정렬되어 있는 경우 정렬 상태가 지워집니다.
    • Ctrl + 아래쪽 화살표는 활성 열 머리글을 DSC 순서로 정렬합니다. DSC에서 열이 이미 정렬된 경우 정렬 상태가 지워집니다.
    • Space는 열을 선택합니다. 열이 이미 선택되어 있으면 선택이 지워집니다.
    • Shift + Alt + 왼쪽 화살표 열이 그룹화 가능으로 표시된 경우 열을 그룹화합니다.
    • Shift + Alt + 오른쪽 화살표 열이 그룹화 가능으로 표시된 경우 열 그룹을 해제합니다.
    • Alt + 왼쪽 화살표 또는 Alt + 위쪽 화살표는 헤더가 아직 축소되지 않은 경우 열 그룹 헤더를 축소합니다.
    • 헤더가 아직 확장되지 않은 경우 Alt + 오른쪽 화살표 또는 `Alt + 아래쪽 화살표는 열 그룹 헤더를 확장합니다.

    Body navigation

    IgxGrid 본체에 초점이 맞춰지면 다음 키 조합을 사용할 수 있습니다.

    Key Combination

    • 위쪽 화살표- 한 셀 위로 이동합니다(줄바꿈 없음).
    • 아래쪽 화살표는 한 셀 아래로 이동합니다(줄바꿈 없음).
    • 왼쪽 화살표는 한 셀 왼쪽으로 이동합니다(줄 바꿈 없음).
    • 오른쪽 화살표- 한 셀 오른쪽으로 이동합니다(줄 바꿈 없음).
    • Ctrl + 왼쪽 화살표는 행의 가장 왼쪽 셀로 이동합니다.
    • Ctrl + 오른쪽 화살표는 행의 가장 오른쪽 셀로 이동합니다.
    • Ctrl + 위쪽 화살표는 열의 첫 번째 셀로 이동합니다.
    • Ctrl + 아래쪽 화살표는 열의 마지막 셀로 이동합니다.
    • 홈은 행의 가장 왼쪽 셀로 이동합니다.
    • End는 행의 가장 오른쪽 셀로 이동합니다.
    • Ctrl + Home은 그리드의 가장 왼쪽 상단 데이터 셀로 이동합니다.
    • Ctrl + End는 그리드의 가장 오른쪽 하단 데이터 셀로 이동합니다.
    • Page Up은 한 페이지(뷰 포트) 위로 스크롤합니다.
    • Page Down은 한 페이지(뷰 포트) 아래로 스크롤합니다.
    • Enter 편집 모드로 들어갑니다.
    • F2는 편집 모드로 들어갑니다
    • Esc를 눌러 편집 모드를 종료합니다.
    • 편집 모드에 셀이 있는 경우에만 탭을 사용할 수 있습니다. 행의 편집 가능한 다음 셀로 포커스를 이동합니다. 행의 마지막 셀에 도달한 후 다음 행의 편집 가능한 첫 번째 셀로 포커스를 이동합니다. 행 편집이 활성화되면 행의 가장 오른쪽 편집 가능한 셀에서 CANCELDONE 버튼으로 포커스가 이동하고 DONE 버튼에서 행의 가장 왼쪽 편집 가능한 셀로 포커스가 이동됩니다.
    • Shift + Tab- 편집 모드에 셀이 있는 경우에만 사용할 수 있습니다. 행의 편집 가능한 이전 셀로 포커스를 이동합니다. 행의 첫 번째 셀에 도달한 후 이전 행의 편집 가능한 마지막 셀로 포커스를 이동합니다. 행 편집이 활성화되면 행의 가장 오른쪽 편집 가능한 셀에서 CANCELDONE 버튼으로 초점이 이동하고 DONE 버튼에서 행의 가장 오른쪽 편집 가능한 셀로 이동됩니다.
    • 공백-행 선택이 활성화된 경우 행을 선택합니다.
    • Alt + 왼쪽 화살표 또는 Alt + 위쪽 화살표- 그룹 행 위 - 그룹 축소
    • Alt + 오른쪽 화살표 또는 Alt + 아래쪽 화살표- 그룹 행 위 - 그룹 확장
    • Alt + 왼쪽 화살표 또는 Alt + 위쪽 화살표- 마스터 세부 정보 행 위 - 세부 정보 보기 축소
    • Alt + 오른쪽 화살표 또는 Alt + 아래쪽 화살표- 마스터 세부 정보 행 위 - 세부 정보 보기 확장
    • 공백- 그룹 행 위 -rowSelection 속성이 다중으로 설정된 경우 그룹의 모든 행을 선택합니다.

    아래 데모 샘플에서 위에 언급된 모든 작업을 연습해 보세요. 탐색 가능한 그리드 요소에 초점을 맞추면 해당 요소에 사용 가능한 일부 작업이 포함된 목록이 표시되어 안내됩니다.

    데모

    Custom keyboard navigation

    특정 키 또는 키 조합에 대한 기본 동작을 재정의하는 것은 키보드 탐색 기능이 제공하는 이점 중 하나입니다. 예를 들어 다음 셀이나 아래 셀로 이동하려면 Enter 또는 Tab 키를 누르세요. 이 탐색 시나리오나 다른 탐색 시나리오는 키보드 탐색 API를 통해 쉽게 달성할 수 있습니다.

    API 설명 인수
    gridKeydown 위에서 설명한 키 누름/조합이 수행될 때 발생하는 이벤트입니다. 취소될 수 있습니다. 다른 키 누르기/조합의 경우 기본값을 사용하십시오.onkeydown 이벤트. IGridKeydownEventArgs
    activeNodeChange 활성 노드가 변경될 때 발생하는 이벤트입니다. 이를 사용하여 활성 포커스 위치(헤더, tbody 등), 열 인덱스, 행 인덱스 또는 중첩 수준을 결정할 수 있습니다. IActiveNodeChangeEventArgs
    navigateTo 제공된 기준에 따라 그리드의 위치로 이동합니다.rowindex 그리고visibleColumnIndex. 또한 유형의 매개변수를 허용하는 콜백 함수를 통해 대상 요소에 대해 사용자 정의 논리를 실행할 수도 있습니다.{ targetType: GridKeydownTargetType, target: Object }. 용법:
    Grid.navigateTo(10, 3, (args) => { args.target.nativeElement.focus(); });
    rowindex: number, visibleColumnIndex: number, callback: ({ targetType: GridKeydownTargetType, target: Object }) => {}
    getNextCell 보고ICellPosition 다음 셀을 정의하는 객체rowIndex 그리고visibileColumnIndex. 콜백 함수는 세 번째 매개변수로 전달될 수 있습니다.getNextCell 방법. 콜백 함수는 다음을 허용합니다.IgxColumnComponent 매개변수로 반환하고boolean 주어진 기준이 충족되면 값 표시:
    const nextEditableCell = Grid.getNextCell(0, 4, (col) => col.editable);
    currentRowIndex: 숫자,currentVisibleColumnIndex: 숫자,callback: (IgxColumnComponent) => 부울
    getPreviousCell 보고ICellPosition 이전 셀을 정의하는 객체rowIndex 그리고visibileColumnIndex. 콜백 함수는 세 번째 매개변수로 전달될 수 있습니다.getPreviousCell 방법. 콜백 함수는 다음을 허용합니다.IgxColumnComponent 매개변수로 반환하고boolean 주어진 기준이 충족되면 값 표시:
    const prevEditableCell = Grid.getPreviousCell(0, 4, (col) => col.editable);
    currentRowIndex: 숫자,currentVisibleColumnIndex: 숫자,callback: (IgxColumnComponent) => 부울

    사용자 입력 유효성 검사 및 사용자 지정 탐색과 같은 일반적인 시나리오를 달성하는 방법을 보여주기 위해 API를 사용해 보겠습니다. 먼저 gridKeydown 이벤트에 대한 이벤트 핸들러를 등록해야 합니다.

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

    IGridKeydownEventArgs 값을 기반으로 우리는 자체 논리를 제공하는 두 가지 사례를 식별했습니다(위 참조). 이제 API의 메서드를 사용하여 원하는 작업을 수행해 보겠습니다. 사용자가 편집 모드에서 셀 위에서 Tab 키를 누르면 입력에 대한 유효성 검사가 수행됩니다. 사용자가 셀 위에서 Enter 키를 누르면 초점이 다음 행의 셀로 이동됩니다.

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

    전체 구현 세부정보는 샘플 코드를 참조하세요.

    아래 데모를 사용하여 방금 구현한 사용자 지정 시나리오를 시험해 보세요.

    • 더블클릭 또는 누르기 F2 셀에 있는 키 주문하다 열에서 값을 다음으로 변경합니다. 7 그리고 누르세요 열쇠. 프롬프트 메시지가 표시됩니다.
    • 셀을 선택하고 Enter 키를 두 번 누릅니다. 키를 누를 때마다 동일한 열 아래의 다음 행에 있는 셀로 초점이 이동합니다.

    데모

    Known Limitations

    한정 설명
    스크롤 가능한 상위 컨테이너를 사용하여 그리드 내부를 탐색합니다. 그리드가 스크롤 가능한 상위 컨테이너 내부에 배치되고 사용자가 보이지 않는 그리드 셀로 이동하는 경우 상위 컨테이너는 스크롤되지 않습니다.

    API References

    Additional Resources

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