gpt4 book ai didi

angular - 如何将我的 md 表(cdk 数据表)连接到要用作数据源的服务?

转载 作者:太空狗 更新时间:2023-10-29 17:26:38 25 4
gpt4 key购买 nike

抱歉,我对此一无所知。

我有一个返回对象数组的方法,我使用该对象数组来显示表格。这是我正在使用的功能:

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 似乎没问题,因为显示了我的单个 header
  • 控制台中没有错误,但competitionsDataSource 似乎为空。

我在下面添加我的文件,我知道问题出在实现中或我尝试填充数据源的方式。

这是比赛课:

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}} 进行数据绑定(bind)。您需要将声明切换为 let competition 或使用 row 进行数据绑定(bind)。

或者:

<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你的表的简化版本。

关于angular - 如何将我的 md 表(cdk 数据表)连接到要用作数据源的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com