데이터 테이블이 기본적으로 오름차순으로 ‘이름’열별로 정렬되도록 아래 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>
그것은 나를 위해 잘 작동합니다