ไม่สามารถเชื่อมโยงกับ "dataSource" เนื่องจากไม่ใช่คุณสมบัติของ "table"


88

ฉันใหม่ในการพัฒนาเชิงมุม 5 ฉันกำลังพยายามพัฒนาตารางข้อมูลด้วยวัสดุเชิงมุมโดยใช้ตัวอย่างที่ให้ไว้ที่นี่: " https://material.angular.io/components/table/examples "

ฉันได้รับข้อผิดพลาดแจ้งว่า Can't bind to 'dataSource' since it isn't a known property of 'table'.

ใส่คำอธิบายภาพที่นี่

กรุณาช่วย.


5
ไม่ใช่tableแค่ใช้<mat-table #table [dataSource]...>
บกพร่อง

1
ลองใช้แท็ก mat-table แล้วข้อผิดพลาดหายไป แต่ฉันไม่เห็นตารางของฉันในมุมมอง
Rahul Munjal

นั่นเป็นวิธีที่ถูกต้องในการใช้องค์ประกอบคุณต้องมีปัญหาอื่นที่อื่น
ข้อบกพร่อง

คุณสามารถให้ตัวอย่างการทำงานโดยใช้mat-tableแท็กได้หรือไม่?
Rahul Munjal

8
ตัวเลือกที่คุณใช้มาจาก v6 และคุณได้ติดตั้ง v5 คุณควรดูตัวอย่าง v5 v5.material.angular.io/components/table/examples
Jota Toledo

คำตอบ:


123

อย่าลืมเพิ่มMatTableModuleในapp.module's importsIE ของคุณ

ใน Angular 9+

import { MatTableModule } from '@angular/material/table'  

@NgModule({
  imports: [
    // ...
    MatTableModule
    // ...
  ]
})

น้อยกว่าเชิงมุม 9

import { MatTableModule } from '@angular/material'  

@NgModule({
  imports: [
    // ...
    MatTableModule
    // ...
  ]
})

4
สิ่งนี้ใช้ได้กับฉันบทช่วยสอนส่วนใหญ่ใช้แท็กตารางไม่ใช่แท็กตารางเสื่อ
Phuah Yee Keat

1
อันนี้ใช้ได้กับฉันเช่นกันเมื่อคุณใช้เลขหน้าเราก็ต้องทำสิ่งเดียวกันฉันคิดว่า
Aathil Ahamed

2
ฉันต้องทำให้มันimport { MatTableModule } from '@angular/material/table'; ใช้งานได้
Chris Gunawardena

1
100% @WasiF หากคุณไม่สามารถผูกกับวัสดุเชิงมุมได้ส่วนใหญ่เกิดจากการนำเข้าโมดูลไม่ได้ คำตอบข้างต้นได้รับการสนับสนุน 100% ของฉัน
Theodore

42

Thanx to @ 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: [
  MatSortModule,
  MatTableModule,
],

2
การใช้สิ่งนี้ฉันสามารถสร้างองค์ประกอบตารางที่ใช้ซ้ำได้ซึ่งใช้อาร์เรย์ข้อมูลและอาร์เรย์ columnNames นี่เป็นทางออกที่ดีกว่าตัวอย่างในmaterial.angular.io
Janne Harju

พยายามทำตามขั้นตอนเดียวกัน แต่ไม่ได้ผล
Signcodeindie

@ Signcodeindie- ขออภัยสำหรับการตอบกลับช้าคุณได้รับข้อผิดพลาดอะไร?
Rahul Munjal

14
  • แกนเชิงมุม v6.0.2,
  • วัสดุเชิงมุม v6.0.2
  • Angular CLI v6.0.0 (ทั่วโลก v6.1.2)

ฉันมีปัญหานี้เมื่อทำงานng testดังนั้นเพื่อแก้ไขฉันได้เพิ่มลงในxyz.component.spec.tsไฟล์ของฉัน:

import { MatTableModule } from '@angular/material';

และเพิ่มลงในimportsส่วนในTestBed.configureTestingModule({}):

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ ReactiveFormsModule, HttpClientModule, RouterTestingModule, MatTableModule ],
      declarations: [ BookComponent ],
      schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
    })
    .compileComponents();
}));

การทดสอบข้อมูลจำเพาะคำตอบที่นี่เช่นกัน แก้ไขสำหรับ Angular 7
SushiGuy

10

หากคุณ "นำเข้า {MatTableModule} จาก" @ angular / material ";" อยู่ในโมดูลที่ใช้ร่วมกันตรวจสอบให้แน่ใจว่าคุณส่งออก

sharedmodule.ts:

import { MatTableModule } from '@angular/material' 

@NgModule({
  imports: [
    // ...
    MatTableModule
    // ...
  ],
  exports:[ MatTableModule ]
})

จากนั้นในโมดูลที่กำหนดเองของคุณซึ่งคุณกำหนดส่วนประกอบที่ใช้ตารางวัสดุ:

custommodule.ts:

@NgModule({
imports: [ sharedmodule ]     
})

9

สำหรับ Angular 7

ตรวจสอบว่าส่วนประกอบตารางของคุณอยู่ที่ใด ในกรณีของฉันมันอยู่เหมือน app / shared / tablecomponent ที่โฟลเดอร์ที่แชร์มีส่วนประกอบย่อยทั้งหมด แต่ฉันกำลังนำเข้าโมดูลวัสดุใน Ngmodules ของ app.module.ts ซึ่งไม่ถูกต้อง ในกรณีนี้ควรนำเข้าโมดูลวัสดุใน Ngmodules ของ shared.module.ts และใช้งานได้

ไม่จำเป็นต้องเปลี่ยน 'table' เป็น 'mat-table' ในเชิงมุม 7

Angular7 - ไม่สามารถเชื่อมโยงกับ 'dataSource' เนื่องจากไม่ใช่คุณสมบัติที่รู้จักของ 'mat-table'


5

ตัวอย่างวัสดุใช้แท็กตารางผิด เปลี่ยน

<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>

2

ฉันยังหัวแตกเป็นเวลานานกับข้อความแสดงข้อผิดพลาดนี้และในภายหลังฉันพบว่าฉันใช้ [datasource] แทน [dataSource]


ขอบคุณสำหรับสิ่งนี้! ฉันมีปัญหาเดียวกันกับตัวแปลงปั๊กทางออนไลน์จาก: html-to-pug.comมันคัดลอกอินพุต[dataSource]และแปลงเป็น[แหล่งข้อมูล]
Jonathan002

0

ปัญหาคือเวอร์ชันวัสดุเชิงมุมของคุณฉันมีเหมือนกันและฉันได้แก้ไขปัญหานี้แล้วเมื่อฉันติดตั้งวัสดุเชิงมุมเวอร์ชันที่ดีในท้องถิ่น

หวังว่ามันจะแก้ปัญหาของคุณเช่นกัน


0

ในกรณีของฉันปัญหาคือฉันไม่ได้ใส่ส่วนประกอบที่มีแหล่งข้อมูลในการประกาศของโมดูลหลัก

NgModule({
  imports: [
    EnterpriseConfigurationsRoutingModule,
    SharedModule
  ],
  declarations: [
    LegalCompanyTypeAssignComponent,
    LegalCompanyTypeAssignItemComponent,
    ProductsOfferedListComponent,
    ProductsOfferedItemComponent,
    CustomerCashWithdrawalRangeListComponent,
    CustomerCashWithdrawalRangeItemComponent,
    CustomerInitialAmountRangeListComponent,
    CustomerInitialAmountRangeItemComponent,
    CustomerAgeRangeListComponent,
    CustomerAgeRangeItemComponent,
    CustomerAccountCreditRangeListComponent, //<--This component contains the dataSource
    CustomerAccountCreditRangeItemComponent,
  

  ],

ส่วนประกอบประกอบด้วย dataSource:

คลาสส่งออก CustomerAccountCreditRangeListComponent ใช้ OnInit {

  @ViewChild(MatPaginator) set paginator(paginator: MatPaginator){
    this.dataSource.paginator = paginator;
  }
  @ViewChild(MatSort) set sort(sort: MatSort){
    this.dataSource.sort = sort;
  }

  dataSource = new MatTableDataSource(); //<--The dataSource used in HTML
  loading: any;
  resultsLength: any;
  displayedColumns: string[] = ["id", "desde", "hasta", "tipoClienteNombre", "eliminar"];
  data: any;

  constructor(
    private crud: CustomerAccountCreditRangeService,
    public snackBar: MatSnackBar,
    public dialog: MatDialog,
    private ui: UIComponentsService
  ) {
  }

นี่คือสำหรับ Angular 9


-1

อย่าลืมนำเข้าโมดูล MatTableModule และลบองค์ประกอบตารางที่แสดงด้านล่างเพื่อใช้อ้างอิง
การใช้งานที่ไม่ถูกต้องการใช้งานที่
<table mat-table [dataSource]=”myDataArray”> ... </table>
ถูกต้อง:
<mat-table [dataSource]="myDataArray"> </mat-table>


-1

หากคุณได้ลองทุกอย่างที่กล่าวถึงที่นี่แล้ว แต่ไม่ได้ผลตรวจสอบให้แน่ใจว่าคุณได้เพิ่มวัสดุเชิงมุมในโครงการ มิฉะนั้นให้รันคำสั่งต่อไปนี้ในเทอร์มินัลเพื่อเพิ่ม:

ng add @angular/material

หลังจากเพิ่มสำเร็จแล้วให้รอให้โครงการรีเฟรชและข้อผิดพลาดจะหายไปโดยอัตโนมัติ


-3

โปรดดู dataSource varibale ของคุณไม่ได้รับข้อมูลจากเซิร์ฟเวอร์หรือ dataSource ไม่ได้กำหนดรูปแบบข้อมูลที่คาดไว้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.