[angular] ‘table’의 알려진 속성이 아니므로 ‘dataSource’에 바인딩 할 수 없습니다.

저는 Angular 5 개발이 처음입니다. 여기에 제공된 예제 ” https://material.angular.io/components/table/examples “를 사용하여 각도 재질로 데이터 테이블을 개발하려고합니다 .

다음과 같은 오류가 발생합니다. Can't bind to 'dataSource' since it isn't a known property of 'table'.

여기에 이미지 설명 입력

도와주세요.



답변

MatTableModule귀하의 app.module's importsIE 를 추가 하는 것을 잊지 마십시오

Angular 9+에서

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

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

Angular 9 미만

import { MatTableModule } from '@angular/material'

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


답변

고맙습니다 @ 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,
],


답변

  • Angular Core v6.0.2,
  • Angular Material, 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();
}));


답변

“import {MatTableModule} from ‘@ angular / material’;” 공유 모듈에있는 경우 내 보내야합니다.

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에서 재질 모듈을 가져 왔습니다. 이 경우에는 shared.module.ts의 Ngmodules에서 Material 모듈을 가져와야합니다.

각도 7에서 ‘테이블’을 ‘매트 테이블’로 변경할 필요가 없습니다.

Angular7- ‘mat-table’의 알려진 속성이 아니므로 ‘dataSource’에 바인딩 할 수 없습니다.


답변

머티리얼 예제는 잘못된 테이블 태그를 사용하고 있습니다. 변화

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


답변

나는 또한이 오류 메시지로 오랫동안 머리를 부수고 있었고 나중에 [dataSource] 대신 [datasource]를 사용하고 있음을 확인했습니다.