Я пытаюсь загрузить данные в mat-table, но когда я console.log источник данных, который я пытаюсь загрузить, он говорит, что данные не определены.
Ссылка на изображение проблемы
Полученный мной объект вложен. Запрос API
Я следую официальному руководству с веб-сайта Angular, и это материал примеры таблиц. Также здесь доступен Таблица, получающая данные через HTTP
Репозиторий:
{"BTC":{"USD":8682.55,"EUR":7851.55},"ETH":{"USD":224.8,"EUR":203.77}}
Это моя попытка: (Вы заметите, что ngAfterViewInit () не используется, это связано с тем, что пользовательский ввод Api должен ждать, я все еще возился с этим).
HTML:
<button (click)="removeList()">Reset</button>
<button (click)="initialiseTableData()">Display Value</button>
<div class="example-container mat-elevation-z8">
<div class="example-loading-shade" *ngIf="isLoadingResults">
<mat-spinner *ngIf="isLoadingResults"></mat-spinner>
</div>
<mat-table #table [dataSource]="dataSource" class="example-table" matSort matSortActive="created" matSortDisableClear
matSortDirection="asc">
<ng-container matColumnDef="cryptocurrency">
<mat-header-cell *matHeaderCellDef>Cryptocurrency</mat-header-cell>
<mat-cell *matCellDef="let row">{{ row.items.cryptovalue }}</mat-cell>
</ng-container>
<ng-container matColumnDef="currency">
<mat-header-cell *matHeaderCellDef>Currency</mat-header-cell>
<mat-cell *matCellDef="let row">{{ row.items.currency }}</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
<mat-paginator [length]="resultsLength" [pageSize]="30">
</mat-paginator>
</div>
А это мой .ts:
import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { merge, Observable, of as observableOf } from 'rxjs';
import { catchError, map, startWith, switchMap } from 'rxjs/operators';
import { FormControl } from '@angular/forms';
import { MatSortModule, MatSort } from '@angular/material/sort';
import { MatPaginatorModule, MatPaginator } from '@angular/material/paginator';
import { MatTableDataSource } from '@angular/material/table';
export interface TableDataApi {
items: Tabledata[];
total_count: number;
}
export interface Tabledata {
cryptovalue: {
currency: string;
};
}
@Component({
selector: 'app-crypto-chooser',
templateUrl: './crypto-chooser.component.html',
styleUrls: ['./crypto-chooser.component.css']
})
export class CryptoChooserComponent implements OnInit, AfterViewInit {
constructor(private client: HttpClient) { }
displayedColumns = ['cryptocurrency', 'currency'];
dataSource = new MatTableDataSource();
resultsLength = 0;
isLoadingResults = false;
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
initialiseTableData() {
this.sort.sortChange.subscribe(() => this.paginator.pageIndex = 0);
merge(this.sort.sortChange, this.paginator.page)
.pipe(
startWith({}),
switchMap(() => {
this.isLoadingResults = true;
return this.getCoins();
}),
map(data => {
this.isLoadingResults = false;
this.resultsLength = data.total_count;
return data.items;
}),
catchError(() => {
this.isLoadingResults = false;
return observableOf([]);
})
).subscribe(data => this.dataSource.data = data);
console.log(this.dataSource);
}
ngAfterViewInit() {
}
getCoins(): Observable<TableDataApi> {
this.generateUrl();
return this.client.get<TableDataApi>(this.urlComplete, this.httpHeader);
}
.subscribe(data => {console.log(data); this.dataSource.data = data;});
Можете ли вы так видеть свои данные? - person bjdose   schedule 29.02.2020console.log(data);
покажет undefined? или показывает полезную нагрузку API? - person bjdose   schedule 29.02.2020map(data => { console.info('what is data?', data); this.isLoadingResults = false; this.resultsLength = data.total_count; return data.items; }),
- person bjdose   schedule 29.02.2020