私はangular 5開発の初心者です。ここで提供されている例を使用して、angularマテリアルでデータテーブルを開発しようとしています: " https://material.angular.io/components/table/examples "。
Can't bind to 'dataSource' since it isn't a known property of 'table'.
というエラーが表示されます
助けてください。
@ Jota.Toledoに感謝します。テーブルを作成するためのソリューションを得ました。以下の作業コードを見つけてください:
component.html
:
<mat-table #table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="{{column.id}}" *ngFor="let column of columnNames">
<mat-header-cell *matHeaderCellDef mat-sort-header> {{column.value}} </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element[column.id]}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row>
</mat-table>
component.ts
:
import { Component, OnInit, ViewChild } from '@angular/core';
import { MatTableDataSource, MatSort } from '@angular/material';
import { DataSource } from '@angular/cdk/table';
@Component({
selector: 'app-m',
templateUrl: './m.component.html',
styleUrls: ['./m.component.css']
})
export class MComponent implements OnInit {
dataSource;
displayedColumns = [];
@ViewChild(MatSort) sort: MatSort;
/**
* Pre-defined columns list for user table
*/
columnNames = [{
id: "position",
value: "No."
}, {
id: "name",
value: "Name"
},
{
id: "weight",
value: "Weight"
},
{
id: "symbol",
value: "Symbol"
}];
ngOnInit() {
this.displayedColumns = this.columnNames.map(x => x.id);
this.createTable();
}
createTable() {
let tableArr: Element[] = [{ position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H' },
{ position: 2, name: 'Helium', weight: 4.0026, symbol: 'He' },
{ position: 3, name: 'Lithium', weight: 6.941, symbol: 'Li' },
{ position: 4, name: 'Beryllium', weight: 9.0122, symbol: 'Be' },
{ position: 5, name: 'Boron', weight: 10.811, symbol: 'B' },
{ position: 6, name: 'Carbon', weight: 12.0107, symbol: 'C' }
];
this.dataSource = new MatTableDataSource(tableArr);
this.dataSource.sort = this.sort;
}
}
export interface Element {
position: number,
name: string,
weight: number,
symbol: string
}
app.module.ts
:
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
ReactiveFormsModule,
HttpClientModule,
AppRoutingModule,
MatCardModule,
MatProgressSpinnerModule,
MatMenuModule,
MatIconModule,
MatToolbarModule,
MatButtonModule,
MatFormFieldModule,
MatInputModule,
MatSelectModule,
MatSortModule,
MatTableModule
],
app.module's imports
にMatTableModule
を追加することを忘れないでください。
import { MatTableModule } from '@angular/material'
@NgModule({
imports: [
// ...
MatTableModule
// ...
]
})
ng test
の実行時にこの問題が発生したため、それを修正するためにxyz.component.spec.ts
ファイルに追加しました。
import { MatTableModule } from '@angular/material';
そして、TestBed.configureTestingModule({})
のimports
セクションに追加しました:
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ ReactiveFormsModule, HttpClientModule, RouterTestingModule, MatTableModule ],
declarations: [ BookComponent ],
schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
})
.compileComponents();
}));
「{@ angular/material 'から{MatTableModule}をインポート;」共有モジュール上にある場合は、必ずエクスポートしてください。
sharedmodule.ts:
import { MatTableModule } from '@angular/material'
@NgModule({
imports: [
// ...
MatTableModule
// ...
],
exports:[ MatTableModule ]
})
次に、材料テーブルを使用するコンポーネントを定義するカスタムモジュールで:
custommodule.ts:
@NgModule({
imports: [ sharedmodule ]
})
Angular 7の場合
テーブルコンポーネントの場所を確認します。私の場合、共有フォルダにすべてのサブコンポーネントが含まれるapp/shared/tablecomponentのように配置されていましたが、app.module.tsのNgmodulesのマテリアルモジュールをインポートしていましたが、これは正しくありませんでした。この場合、Materialモジュールをshared.module.tsのNgmodulesにインポートする必要があります。
angular 7の 'table'を 'mat-table'に変更する必要はありません。
マテリアルの例は、間違ったテーブルタグを使用しています。変化する
<table mat-table></table>
<th mat-header-cell></th>
<td mat-cell></td>
<tr mat-header-row></tr>
<tr mat-row></tr>
に
<mat-table></mat-table>
<mat-header-cell></mat-header-cell>
<mat-cell></mat-cell>
<mat-header-row></<mat-header-row>
<mat-row></<mat-row>
問題はあなたのangularマテリアルバージョンです。私は同じバージョンを持っています。ローカルにangularマテリアルの良いバージョンをインストールしたときにこれを解決しました。
それもあなたの問題を解決することを願っています。
また、このエラーメッセージで長い間頭を痛めていましたが、後で[dataSource]ではなく[datasource]を使用していることがわかりました。