Basic Angular Material table 显示的是测试数据,但不是我的数据
Basic Angular Material table is showing test data, but not my data
table 显示了它在使用测试对象数组时应该显示的数据,但在 table 中使用我需要的实际对象数组时却没有,我想不通找出我所缺少的!
这是测试数组:
export interface TestData {
compa: string;
company: string;
}
const TEST_DATA: TestData[] = [
{compa: 'blah', company: 'blahblahblah'},
{compa: 'blah2', company: 's'},
{compa: 'blah23', company: 's'},
{compa: 'blah234', company: 's'},
{compa: 'blah2345', company: 'fads'}
];
displayedColumns = ['company'];
dataSource = TEST_DATA;
...当尝试只显示公司时,它成功了
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="company">
<th mat-header-cell *matHeaderCellDef> Company </th>
<td mat-cell *matCellDef="let site"> {{ site.company }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
'sites' 数组是从数据库中检索的,它的值设置为 OnInit:
sites: Site[] = [];
但这行不通:
displayedColumns = ['company'];
dataSource = this.sites;
... 尽管 this.sites 也是一个对象数组,每个对象都包含一个带有键 'company' 的字段,就像 TEST_DATA 数组一样。
我什至可以 console.log(this.sites)
和它 returns 数组,但是当我设置 dataSource = this.sites
,然后尝试 console.log(this.dataSource)
它是空的......
这是从后端获取数据的代码
ngOnInit() {
this.sitesService.getUtilitySites('Evansville');
this.sitesSub = this.sitesService
.getSiteUpdatedListener()
.subscribe((siteData: {sites: Site[]}) => {
this.sites = siteData.sites;
this.sitesLoaded = true;
});
}
我很困惑...请帮忙
尝试分配给 this.dataSource 而不是仅分配给 dataSource 即。将 dataSource = this.sites
替换为 this.dataSource = this.sites
在 NgOninit 函数中执行
ngOnInit() {
this.sitesService.getUtilitySites('Evansville');
this.sitesSub = this.sitesService
.getSiteUpdatedListener()
.subscribe((siteData: {sites: Site[]}) => {
this.sites = siteData.sites;
this.dataSource = siteData.sites;
this.sitesLoaded = true;
});
}
它从后端获取的代码在哪里?如果您订阅,请确保此代码在订阅中
尝试 -ChangeDetectorRef ,有时 angular 不会获取刷新数据,
import { ChangeDetectorRef } from '@angular/core';
constructor(private cd : ChangeDetectorRef){}
其中后端数据绑定到数据源添加 cd.detectChanges 像这样,
displayedColumns = ['company'];
dataSource = this.sites;
this.cd.detectChanges();
table 显示了它在使用测试对象数组时应该显示的数据,但在 table 中使用我需要的实际对象数组时却没有,我想不通找出我所缺少的!
这是测试数组:
export interface TestData {
compa: string;
company: string;
}
const TEST_DATA: TestData[] = [
{compa: 'blah', company: 'blahblahblah'},
{compa: 'blah2', company: 's'},
{compa: 'blah23', company: 's'},
{compa: 'blah234', company: 's'},
{compa: 'blah2345', company: 'fads'}
];
displayedColumns = ['company'];
dataSource = TEST_DATA;
...当尝试只显示公司时,它成功了
<table mat-table [dataSource]="dataSource">
<ng-container matColumnDef="company">
<th mat-header-cell *matHeaderCellDef> Company </th>
<td mat-cell *matCellDef="let site"> {{ site.company }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
'sites' 数组是从数据库中检索的,它的值设置为 OnInit:
sites: Site[] = [];
但这行不通:
displayedColumns = ['company'];
dataSource = this.sites;
... 尽管 this.sites 也是一个对象数组,每个对象都包含一个带有键 'company' 的字段,就像 TEST_DATA 数组一样。
我什至可以 console.log(this.sites)
和它 returns 数组,但是当我设置 dataSource = this.sites
,然后尝试 console.log(this.dataSource)
它是空的......
这是从后端获取数据的代码
ngOnInit() {
this.sitesService.getUtilitySites('Evansville');
this.sitesSub = this.sitesService
.getSiteUpdatedListener()
.subscribe((siteData: {sites: Site[]}) => {
this.sites = siteData.sites;
this.sitesLoaded = true;
});
}
我很困惑...请帮忙
尝试分配给 this.dataSource 而不是仅分配给 dataSource 即。将 dataSource = this.sites
替换为 this.dataSource = this.sites
在 NgOninit 函数中执行
ngOnInit() {
this.sitesService.getUtilitySites('Evansville');
this.sitesSub = this.sitesService
.getSiteUpdatedListener()
.subscribe((siteData: {sites: Site[]}) => {
this.sites = siteData.sites;
this.dataSource = siteData.sites;
this.sitesLoaded = true;
});
}
它从后端获取的代码在哪里?如果您订阅,请确保此代码在订阅中
尝试 -ChangeDetectorRef ,有时 angular 不会获取刷新数据,
import { ChangeDetectorRef } from '@angular/core';
constructor(private cd : ChangeDetectorRef){}
其中后端数据绑定到数据源添加 cd.detectChanges 像这样,
displayedColumns = ['company'];
dataSource = this.sites;
this.cd.detectChanges();