[angular] Angular Material의 기본 정렬-정렬 헤더

데이터 테이블이 기본적으로 오름차순으로 ‘이름’열별로 정렬되도록 아래 Angular Material 코드를 어떻게 변경할 수 있습니까? 화살표 (현재 정렬 방향을 나타냄)가 표시되어야합니다.

이것이 내가 이루고 싶은 것입니다.

여기에 이미지 설명 입력

원래 코드 :

<table matSort (matSortChange)="sortData($event)">
  <tr>
    <th mat-sort-header="name">Dessert (100g)</th>
    <th mat-sort-header="calories">Calories</th>
    <th mat-sort-header="fat">Fat (g)</th>
    <th mat-sort-header="carbs">Carbs (g)</th>
    <th mat-sort-header="protein">Protein (g)</th>
  </tr>

  <tr *ngFor="let dessert of sortedData">
    <td>{{dessert.name}}</td>
    <td>{{dessert.calories}}</td>
    <td>{{dessert.fat}}</td>
    <td>{{dessert.carbs}}</td>
    <td>{{dessert.protein}}</td>
  </tr>
</table>

나는 이와 같은 것을 시도했지만 작동하지 않습니다 (화살표가 표시되지 않고 정렬되지 않음)

<table matSort (matSortChange)="sortData($event)" matSortActive="name" matSortStart="asc" matSortDisableClear>

Plunker에 대한 링크입니다.



답변

당신은 착각하고 matSortStart위해 matSortDirection.

이 시도:

<table matSort (matSortChange)="sortData($event)" matSortActive="name" matSortDirection="asc" matSortDisableClear>

https://plnkr.co/edit/sg0hC5d8LTjLKhbH9Eug?p=preview

matSortStart 정렬 할 때 사용되는주기를 반대로하는 데 사용할 수 있습니다 (예 : 사용자가 정렬하기 위해 클릭하면 asc 대신 desc에서 시작).


답변

sort(Sortable)데이터 소스 의 메서드를 호출하여 프로그래밍 방식으로 테이블을 정렬 할 수 있습니다 . dataSource데이터 소스에 대한 구성 요소 속성 이 있다고 가정합니다 .

// to put next to the class fields of the component
@ViewChild(MatSort) sort: MatSort

// to put where you want the sort to be programmatically triggered, for example inside ngOnInit
this.sort.sort(({ id: 'name', start: 'asc'}) as MatSortable);
this.dataSource.sort = this.sort;


답변

@ViewChild(MatSort) sort: MatSort;

this.dataSource.sort = this.sort;

const sortState: Sort = {active: 'name', direction: 'desc'};
this.sort.active = sortState.active;
this.sort.direction = sortState.direction;
this.sort.sortChange.emit(sortState);

작동해야합니다. 데모

정렬 방향 화살표를 표시하려면 다음 CSS를 추가하십시오 (해결 방법).

th.mat-header-cell .mat-sort-header-container.mat-sort-header-sorted .mat-sort-header-arrow {
    opacity: 1 !important;
    transform: translateY(0) !important;
}


답변

재료 업데이트 (v7.3에서 테스트) :

@ViewChild(MatSort) matSort: MatSort;

private someMethod(): void {
  this.matSort.sort({ id: 'columnName', start: 'asc', disableClear: false });
}

이렇게하면 mat-sort-header해결 방법없이의 화살표 도 업데이트됩니다.


답변

매트 테이블 정렬 속성을 구성 요소 변수에 바인딩 할 수도 있습니다.

@Andrew Seguin은 다음과 같이 말합니다.

<table matSort matSortActive="name" matSortDirection="asc">

이것이 어느 것이인지 아는 경우 기본 정렬을 설정하는 적절한 방법입니다.

다른 곳에서 정렬하는 경우 (제 경우에는 쿼리 문자열 매개 변수에서) 다음과 같이 수행 할 수도 있습니다 (정렬 화살표는 여기에서 완벽하게 작동 함).

sortDirection: 'name',  // this can be changed or filled in any time
sortProperty: 'asc',


<mat-table matSort [matSortActive]="sortProperty" [matSortDirection]="sortDirection">


답변

아마도 페이지의 초기화에서 이름과 방향에 강제로 정렬 기능을 호출하려고 했습니까?

     ngOnInit() {
    let defSort: Sort = {};
    defSort.direction = 'asc';
    defSort.active = 'name';
    this.sortData(defSort);
  }


답변

제 경우에는 matColumDef id와 mat-cell var가 다르기 때문에 정렬이 작동하지 않았습니다.

<ng-container matColumnDef="firstName">
   <th mat-header-cell *matHeaderCellDef mat-sort-header class="mat-table-header">First Name</th>
  <td mat-cell *matCellDef="let item"> {{ item.name}}</td>
</ng-container>

matColumnDef = “firstName”을 항목과 동일한 matColumnDef = ” name “으로 변경 한 후 . 이름

    <ng-container matColumnDef="name">
   <th mat-header-cell *matHeaderCellDef mat-sort-header class="mat-table-header">First Name</th>
  <td mat-cell *matCellDef="let item"> {{ item.name}}</td>
</ng-container>

그것은 나를 위해 잘 작동합니다