Как я могу показать стрелки моей отсортированной таблицы в соответствии с моим порядком сортировки в angular?
У меня есть таблица, которую я сортирую от большего к меньшему или в алфавитном порядке.
вот html той части, которую я сортирую
<tr>
<th scope="col" [appSort]="dataList" data-order="desc" data-name="no">
<span (click)="sort()" class="sort-icon d-flex"> No
<mat-icon *ngIf="sorting === 'desc'">keyboard_arrow_down</mat-icon>
<mat-icon *ngIf="sorting === 'asc'">keyboard_arrow_up</mat-icon>
</span>
</th>
<th scope="col" [appSort]="dataList" data-order="desc" data-name="id">
<span (click)="sort()" class="sort-icon d-flex">Id
<mat-icon *ngIf="sorting === 'desc'">keyboard_arrow_down</mat-icon>
<mat-icon *ngIf="sorting === 'asc'">keyboard_arrow_up</mat-icon>
</span>
</th>
<th scope="col" [appSort]="dataList" data-order="desc" data-name="type">Tür</th>
<th scope="col" [appSort]="dataList" data-order="desc" data-name="additional">Ek</th>
<th scope="col" [appSort]="dataList" data-order="desc" data-name="media">Medya
</th>
</tr>
** а вот моя функция в машинописной части **
sorting = "desc"
sort() {
if (this.sorting == "desc") {
this.sorting = "asc"
} else {
this.sorting = "desc"
}
}
Моя проблема здесь в том, что когда я сортирую по «НЕТ», моя стрелка в «ID» перемещается. Как я могу это решить?
Когда я нажимаю «НЕТ», я просто хочу, чтобы стрелка двигалась вверх и вниз.
сноска: это мой первый вопрос, пожалуйста, покритикуйте, если я что-то упустил.
3 ответа
Если это не так, вам нужно импортироватьprivate _cd: ChangeDetectorRef,
в конструктор компонента.
И добавьте функцию стирания сортировки:
sorting = "desc"
sort() {
this.sorting = (this.sorting == "desc") ? "asc" : "desc";
this._cd.markForCheck();
}
Я не уверен, хотите ли вы пройти через это или нет. Но учитывая, что вы не хотите, чтобы это решение сработало. Я только что использовал базовую структуру из вашего кода, потому что не хотел устанавливать все модули. Но это должно дать вам представление.
<th scope="col" data-order="desc" data-name="no">
<span (click)="sort('no')" class="sort-icon d-flex"> No
<span *ngIf="sorting['no'] === 'desc'">↑</span>
<span *ngIf="sorting['no'] === 'asc'">↓</span>
</span>
</th>
<th scope="col" data-order="desc" data-name="id">
<span (click)="sort('id')" class="sort-icon d-flex">Id
<span *ngIf="sorting['id'] === 'desc'">↑</span>
<span *ngIf="sorting['id'] === 'asc'">↓</span>
</span>
</th>
<th scope="col" data-order="desc" data-name="type">Tür</th>
<th scope="col" data-order="desc" data-name="additional">Ek</th>
<th scope="col" data-order="desc" data-name="media">Medya
</th>
sorting = { no: 'desc', id: 'desc' };
sort(key: any) {
if (this.sorting[key] == 'desc') {
this.sorting[key] = 'asc';
} else {
this.sorting[key] = 'desc';
}
}
Основная идея состоит в том, чтобы сохранить сортировку каждого столбца отдельно. Либо в самом источнике данных, либо в отдельном объекте, как я показал в примере.
Надеюсь это поможет.
вот рабочий пример. Пример стекблиц
Я думаю, что решение зависит от ваших требований. Если вы хотите, чтобы таблица была отсортирована на основе двух столбцов, то решение, данное @tarun-bhati, должно работать, предполагая, что сортировка работает таким образом.
Если вы хотите, чтобы таблица сортировалась только по одному столбцу, вы можете сделать что-то вроде -
sortingOrder: string;
sortedColumn: string;
sort(column: string) {
if (this.sortingOrder == 'desc') {
this.sortingOrder = 'asc';
} else {
this.sortingOrder = 'desc';
}
this.sortedColumn = column;
}
А затем используйте их с условиями then в значках сортировки.