对不起,但我在这个黑暗中.
我有一个方法返回一个对象数组,我使用该对象数组来显示一个表.这是我正在使用的功能:
getCompetitions(): Promise<Competition[]> { let options: RequestOptionsArgs = {}; let params = new URLSearchParams(); params.append('size','250'); options.params = params; return this.http.get(this.competitionsUrl,options) .toPromise() .then(response => response.json()._embedded.competitions as Competition[]) .catch(this.handleError); }
我的ngOnInit()方法在启动时调用该函数并获得一个使用ngFor迭代的竞争数组,我正在创建表而没有问题.
我想要的是实现md-table或cdk-table组件.我使用该UI库完成了应用程序的其余部分.
>我知道我的进口是正确的.
> HTML似乎很好,因为我显示了单个标题
>控制台中没有错误,但competitionsDataSource似乎是空的.
我在下面添加我的文件,我知道问题在于实现或者我是如何尝试填充dataSource的.
这是比赛课程:
export class Competition { compName: string; compStart: Date; compEnd: Date; compFull: number; compTeamCount: number; compChamp: number; compRunnerup: number; compType: number; compCountry: string; _links: { self: { href: string; },matches: { href: string; } } }
这是组件
import { Component,OnInit } from '@angular/core'; import { DataSource } from '@angular/cdk'; import { Observable } from 'rxjs/Observable'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; import { Competition } from '../../competition/competition'; import { CompetitionService } from '../../competition/competition.service' import 'rxjs/add/operator/startWith'; import 'rxjs/add/observable/merge'; import 'rxjs/add/operator/map'; @Component({ selector: 'comp-table-cmp',moduleId: module.id,templateUrl: 'competitions-table.component.html',}) export class CompetitionsTableComponent{ //1- Define my columns displayedColumns = ['compName']; //2- Define the database as a new database competitionsDatabase = new CompetitionsDatabase(); //3- Define the datasource competitionsDatasource: CompetitionsDatasource | null; ngOnInit() { //4 - declare the datasource. this.competitionsDatasource = new CompetitionsDatasource(this.competitionsDatabase); console.log(this.competitionsDatasource); } } export class CompetitionsDatabase { competitions: Competition[]; dataChange: BehaviorSubject<Competition[]> = new BehaviorSubject<Competition[]>([]); get data(): Competition[] { this.competitions = []; this.competitionService.getCompetitions().then( results => { results.forEach(result => { if (result.compType === 1) { this.competitions.push(result); this.dataChange.next(results); } //Call Method to retrieve team names. }); return results; } ) console.log(this.dataChange); return this.competitions; } constructor( private competitionService: CompetitionService,) {} } export class CompetitionsDatasource extends DataSource<any> { constructor(private _exampleDatabase: CompetitionsDatabase) { super(); } /** Connect function called by the table to retrieve one stream containing the data to render. */ connect(): Observable<Competition[]> { console.log('ExampleDataSource#connect') return this._exampleDatabase.dataChange; } disconnect() {} }
和HTML:
<div class="example-container mat-elevation-z8"> <cdk-table #table [dataSource]="CompetitionsDatasource" class="example-table"> <!--- Note that these columns can be defined in any order. The actual rendered columns are set as a property on the row definition" --> <!-- CompName Column --> <ng-container cdkColumnDef="compName"> <cdk-header-cell *cdkHeaderCellDef class="example-header-cell"> CompName </cdk-header-cell> <cdk-cell *cdkCellDef="let row" class="example-cell"> {{competition.compName}} </cdk-cell> </ng-container> <cdk-header-row *cdkHeaderRowDef="displayedColumns" class="example-header-row"></cdk-header-row> <cdk-row *cdkRowDef="let row; columns: displayedColumns;" class="example-row"></cdk-row> </cdk-table> </div>
结果只是标题“CompName”
请帮忙!
您无法定义let row,然后执行数据绑定到{{competition.compName}}.您需要切换声明以允许竞争或与行进行数据绑定.
原文链接:https://www.f2er.com/angularjs/143395.html或者:
<cdk-cell *cdkCellDef="let row" class="example-cell"> {{row.compName}} </cdk-cell>
要么:
<cdk-cell *cdkCellDef="let competition" class="example-cell"> {{competition.compName}} </cdk-cell>
此外,您可以通过仅扩展DataSource类来执行数据检索和connect().这是表格的简化版本Plunker example.