Здравствуйте, я использую Angular Material и пытаюсь отобразить в таблице данные в следующем формате:
{
"error": [],
"result": {
"ADAUSD": {
"asks": [
[
"0.068890",
"22428.508",
1540845036
],
[...]
В просит table есть еще одна коллекция таблиц. Мне нужно использовать только первые два значения этой таблицы с отступом. В этом случае 0,068890 и 22428.508 .
Итак, я получил два столбца, которые я назвал Оценить и Количество . Данные печатаются правильно, но данные сортируются только по последнему столбцу.
Поскольку в этом формате данных JSON нет объектов и только таблиц, это создает много проблем.
Вот компонент HTML:
<table mat-table [dataSource]="dataSource" matSort (matSortChange)="sortData($event)" matSortActive="Quantity" matSortDirection="asc" matSortDisableClear class="mat-elevation-z8">
<ng-container matColumnDef="Quantity">
<th mat-header-cell *matHeaderCellDef mat-sort-header="Quantity"> Quantity </th>
<td mat-cell *matCellDef="let element"> {{element[1]}} </td>
</ng-container>
<ng-container matColumnDef="Rate">
<th mat-header-cell *matHeaderCellDef mat-sort-header="Rate"> Rate </th>
<td mat-cell *matCellDef="let element"> {{element[0]}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator [pageSizeOptions]="[5]"></mat-paginator>
А, компонент ТС:
import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
import { MatSort, MatPaginator, MatTableDataSource, Sort} from '@angular/material';
import { OrderBookKrakenService } from 'src/app/core/order-book-kraken/order-book-kraken.service';
@Component({
selector: 'app-kraken-sell-usd-ada',
templateUrl: './kraken-sell-usd-ada.component.html',
styleUrls: ['./kraken-sell-usd-ada.component.css']
})
export class KrakenSellUsdAdaComponent implements OnInit, AfterViewInit {
displayedColumns: string[] = ['Quantity', 'Rate'];
dataSource;
sortedData;
@ViewChild(MatSort) sort: MatSort;
@ViewChild(MatPaginator) paginator: MatPaginator;
constructor(private orderBookService: OrderBookKrakenService) {
this.getTransfers();
}
ngOnInit() {
}
ngAfterViewInit() {
}
private getTransfers(): void {
const currency1 = 'ADA';
const currency2 = 'USD';
this.orderBookService.getOrderBookKraken(currency1, currency2)
.subscribe(orders => {
if (!orders) { return; }
console.log(orders);
this.dataSource = orders.result.ADAUSD.bids;
this.dataSource = this.dataSource.slice();
//this.dataSource.sort = this.sort;
this.sortedData.paginator = this.paginator;
});
}
sortData(sort: Sort) {
const data = this.dataSource.slice();
if (!sort.active || sort.direction === '') {
this.dataSource = data;
return;
}
this.dataSource = data.sort((a, b) => {
const isAsc = sort.direction === 'asc';
switch (sort.active) {
case 'Quantity': return compare(a, b, isAsc);
case 'Rate': return compare(a, b, isAsc);
default: return 0;
}
});
}
}
function compare(a: number | string, b: number | string, isAsc: boolean) {
return (a < b ? -1 : 1) * (isAsc ? 1 : -1);
}
Как видите, я пытался объединить mat-table и mat-sort-header . К сожалению mat-table сортировка вообще не работает.