【问题标题】:Angular7 - Can't bind to 'dataSource' since it isn't a known property of 'mat-table'Angular7 - 无法绑定到“dataSource”,因为它不是“mat-table”的已知属性
【发布时间】:2019-04-10 15:28:57
【问题描述】:

我使用的是 Angular 7.0.2,在尝试使用 Angular Material 创建表时遇到此错误

无法绑定到“dataSource”,因为它不是“mat-table”的已知属性

app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatTableModule } from '@angular/material';

import { HomeComponent } from './home/home.component';
import { ProductionOrderComponent } from './production-order/production-order.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'production-order', component: ProductionOrderComponent },
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes),
    HttpClientModule,
    BrowserAnimationsModule,
    MatTableModule,
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

html

<mat-table [dataSource]="productionOrder" class="mat-elevation-z8">
  <ng-container matColumnDef="t_pdno">
    <th mat-header-cell *matHeaderCellDef>Production Order</th>
    <td mat-cell *matCellDef="let productionOrder">{{ productionOrder.t_pdno }}</td>
  </ng-container>
  <ng-container matColumnDef="t_mitm">
    <th mat-header-cell *matHeaderCellDef>Item</th>
    <td mat-cell *matCellDef="let productionOrder">{{ productionOrder.t_mitm }}</td>
  </ng-container>
  <mat-header-row *matHeaderRowDef="['t_pdno', 't_mitm']"></mat-header-row>
  <mat-row *matRowDef="let row; columns: ['t_pdno', 't_mitm'];"></mat-row>
</mat-table>

组件

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-production-order',
  templateUrl: './production-order.component.html',
  styleUrls: ['./production-order.component.scss']
})
export class ProductionOrderComponent implements OnInit {

  public productionOrder

  constructor(private http: HttpClient) { }

  ngOnInit() {
    this.getData()
  }

  getData() {
    this.http.get('http://localhost:3000/api/production-order').subscribe(res => {
      console.log(res['data'])
      this.productionOrder = res['data']
    })
  }

}

我尝试了什么:

  • 使用&lt;table mat-table&gt; 而不是&lt;mat-table&gt;

  • import { MatTableModule } from '@angular/material'; 在组件中

还有这些链接:

Can't bind to 'dataSource' since it isn't a known property of 'table'

mat-table can't bind dataSource

有人知道如何解决这个问题吗?

【问题讨论】:

  • 你需要在模块中而不是组件中import { MatTableModule } from '@angular/material';,并将MatTableModule添加到imports数组中
  • 它已经在那里了。请参阅 app-routing.module.ts 代码部分。
  • 它需要在你声明ProductionOrderComponent的模块中
  • 其实接受的答案是不对的。问题是您正在使用来自不同版本的 Angular Material 的不同代码。您的 HTML 代码包含 标签和 标签。解决方案是选择一个版本并坚持下去。
    带有 和 或更新版本 ​​eader-cell>

标签: angular angular-material2


【解决方案1】:

您应该在AppModule 或声明您的组件的模块中导入MatTableModule

@NgModule({
  imports: [
    MatTableModule
    ...
  ]
})
public class AppModule

@NgModule({
  imports: [
    MatTableModule
    ...
  ],
  declarations : [ProductionOrderComponent]
})
public class MyModule

【讨论】:

  • 也不适合我。在 Angular 7 中尝试过。有人可以帮忙吗?
  • @Uttam - 您必须在其他模块中使用它,确保将 MatTableModule 导入该模块。
  • 使用我导入 MatTableModule 但忘记导出它的 SharedModule。哎呀!
【解决方案2】:

我想完成 Sunil 的回答:您应该在 AppModule 或声明组件的模块中导入 MatTableModuleCdkTableModule

@NgModule({
  imports: [
    CdkTableModule,
    MatTableModule
    ...
  ]
})
public class AppModule

【讨论】:

【解决方案3】:

如果您认为通过在 app.module.ts 中导入 MatTableModule 做的一切正确,如下所示

import { MatTableModule } from '@angular/material';
@NgModule({
  declarations: [
    AppComponent,
    TopBarComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    MatTableModule,
    CdkTableModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})

并在 html 中将 更改为 ,但它仍然无法正常工作,而不是看看你是如何编写 dataSource 属性标签的。

它必须是 [dataSource] 而不是 [datasource]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 2022-11-27
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2018-07-21
    • 2020-03-11
    相关资源
    最近更新 更多