Không thể liên kết với 'dataSource' vì nó không phải là thuộc tính đã biết của 'table'


86

Tôi là người mới trong phát triển góc 5. Tôi đang cố gắng phát triển một bảng dữ liệu với vật liệu góc cạnh bằng cách sử dụng ví dụ được cung cấp tại đây: " https://material.angular.io/components/table/examples ".

Tôi gặp lỗi khi nói Can't bind to 'dataSource' since it isn't a known property of 'table'.

nhập mô tả hình ảnh ở đây

Xin vui lòng giúp đỡ.


4
Nó không phải table, chỉ cần sử dụng<mat-table #table [dataSource]...>
lỗi

1
đã thử sử dụng thẻ mat-table, sau đó lỗi biến mất nhưng tôi không thấy bảng của mình trong chế độ xem.
Rahul Munjal

Đó là cách thích hợp để sử dụng phần tử, bạn phải gặp các vấn đề khác ở một nơi khác
lỗi

Bạn có thể cung cấp cho tôi một ví dụ làm việc bằng cách sử dụng mat-tablethẻ không?
Rahul Munjal

8
Bộ chọn mà bạn đang sử dụng là từ v6 và bạn đã cài đặt v5. Bạn nên xem các ví dụ v5 v5.material.angular.io/components/table/examples
Jota.Toledo

Câu trả lời:


117

Hãy nhớ thêm MatTableModulevào app.module's importstức là của bạn

Trong Angular 9+

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

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

Ít hơn Angular 9

import { MatTableModule } from '@angular/material'  

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

4
Cái này phù hợp với tôi, hầu hết các hướng dẫn sử dụng thẻ bảng chứ không phải thẻ bảng.
Phuah Yee Keat

1
Điều này cũng phù hợp với tôi khi bạn sử dụng phân trang, chúng tôi cũng phải làm điều tương tự, tôi nghĩ
Aathil Ahamed

2
Tôi phải làm cho nó import { MatTableModule } from '@angular/material/table'; hoạt động
Chris Gunawardena

1
100% @WasiF nếu bạn nhận được không thể liên kết với vật liệu góc cạnh, chủ yếu là do mô-đun không được nhập. Câu trả lời trên nhận được sự ủng hộ 100% của tôi.
Theodore

41

Thanx với @ Jota.Toledo, tôi đã có giải pháp cho việc tạo bảng của mình. Vui lòng tìm mã làm việc bên dưới:

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
Bằng cách sử dụng này, tôi có thể tạo thành phần bảng có thể sử dụng lại có mảng dữ liệu và mảng columnNames. Đây là giải pháp tốt hơn nhiều so ví dụ trong material.angular.io
Janne Harju

Đã thử các bước tương tự nhưng không giúp được gì.
Signcodeindie

@ Signcodeindie- Xin lỗi vì trả lời quá muộn, bạn đang gặp lỗi gì?
Rahul Munjal

14
  • Angular Core v6.0.2,
  • Vật liệu góc, v6.0.2,
  • Angular CLI v6.0.0 (toàn cầu v6.1.2)

Tôi gặp sự cố này khi chạy ng test, vì vậy để khắc phục, tôi đã thêm vào xyz.component.spec.tstệp của mình :

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

Và thêm nó vào importsphần trong TestBed.configureTestingModule({}):

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

Kiểm tra đặc tả câu trả lời ở đây. Đã giải quyết cho Angular 7.
SushiGuy

10

nếu bạn "nhập {MatTableModule} từ '@ angle / material';" nằm trên một mô-đun được chia sẻ, hãy đảm bảo bạn xuất nó.

sharedmodule.ts:

import { MatTableModule } from '@angular/material' 

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

sau đó trên mô-đun tùy chỉnh của bạn, nơi bạn xác định thành phần sử dụng bảng material:

custommodule.ts:

@NgModule({
imports: [ sharedmodule ]     
})

9

Đối với Angular 7

Kiểm tra thành phần bảng của bạn nằm ở đâu. Trong trường hợp của tôi, nó được đặt giống như app / shared / tablecomponent nơi thư mục chia sẻ chứa tất cả các thành phần con Nhưng tôi đang nhập mô-đun material trong Ngmodules của app.module.ts, điều này không chính xác. Trong trường hợp này, mô-đun Material nên được nhập trong Ngmodules của shared.module.ts Và nó hoạt động.

KHÔNG CẦN thay đổi 'table' thành 'mat-table' ở góc 7.

Angular7 - Không thể liên kết với 'dataSource' vì nó không phải thuộc tính đã biết của 'mat-table'


4

Ví dụ về material đang sử dụng các thẻ bảng sai. Thay đổi

<table mat-table></table>
<th mat-header-cell></th>
<td mat-cell></td>

<tr mat-header-row></tr>
<tr mat-row></tr>

đến

<mat-table></mat-table>
<mat-header-cell></mat-header-cell>
<mat-cell></mat-cell>

<mat-header-row></<mat-header-row>
<mat-row></<mat-row>

1

Tôi cũng đã suy sụp trong một thời gian dài với thông báo lỗi này và sau đó tôi xác định rằng tôi đang sử dụng [datasource] thay vì [dataSource].


Cám ơn vì cái này! Tôi đã gặp vấn đề tương tự với một trình chuyển đổi pug trực tuyến từ: html-to-pug.com , nó đã sao chép đầu vào [dataSource] và chuyển đổi nó thành [datasource]
Jonathan002

0

Vấn đề là phiên bản vật liệu góc cạnh của bạn, tôi cũng có như vậy, và tôi đã giải quyết vấn đề này khi tôi đã cài đặt phiên bản vật liệu góc cạnh tốt trong địa phương.

Hy vọng nó cũng giải quyết được của bạn.


-1

Hãy nhớ nhập mô-đun MatTableModule và xóa phần tử bảng hiển thị bên dưới để tham khảo.
triển khai sai thực hiện
<table mat-table [dataSource]=”myDataArray”> ... </table>
đúng:
<mat-table [dataSource]="myDataArray"> </mat-table>


-3

Vui lòng xem biến thể DataSource của bạn không nhận được dữ liệu từ máy chủ hoặc dataSource không được gán cho định dạng dữ liệu mong đợi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.