Angular MatTableDataSource 错误

Muh*_*qon 8 mean angular

我收到这样的错误:

[ts]“Company”类型的参数不可分配给“Company[]”类型的参数。“公司”类型中缺少属性“包括”。

当我想将数组对象插入 MatTableDataSource 时。这是我的 TypeScript 文件:

import { Component, OnInit, ViewChild } from '@angular/core';
import { MatTableModule } from '@angular/material/table';
import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material';
import { CompanyService } from '../../../services/company.service';
import { AuthService } from '../../../services/auth.service';
import { DataSource } from '@angular/cdk/collections';
import { Company } from '../../../models/company.model';
import { Observable } from "rxjs";
import { Router } from '@angular/router';
import { filter } from 'rxjs/operators';
@Component({
  selector: 'app-index-company',
  templateUrl: './index-company.component.html',
  styleUrls: ['./index-company.component.css']
})

export class IndexCompanyComponent implements OnInit {
  company   : Object;
  companies : Object;
  displayedColumns = ['perusahaan', 'kategori', 'mahasiswa', 'option'];
  dataSource: MatTableDataSource<Company>;
  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;

  applyFilter(filterValue: string) {
    filterValue = filterValue.trim(); 
    filterValue = filterValue.toLowerCase();
    this.dataSource.filter = filterValue; 
  }
  constructor(
    private companyService: CompanyService,
    private authService: AuthService,
    private router: Router
  )
  {
      this.companyService.getCompanies().subscribe(companies => {
      this.companies = companies;
      this.dataSource = new MatTableDataSource(companies);
    },
    err => {
      console.log(err);
      return false;
    });
  }

  ngOnInit() {
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我公司的型号:

export class Company{
    perusahaan       : String;
    alamat           : String;
    deskripsi        : String;
    telepon          : String;
    email_perusahaan : String;
    website          : String;
    students         = [];
    kategori         : String;
    author           : String;
    update_by        : String;
    status           : String;
}
Run Code Online (Sandbox Code Playgroud)

已编辑。公司服务添加:

  getCompanies(): Observable<Company>{
    let headers = new Headers();
    headers.append('Authorization', this.authToken);
    headers.append('Content-Type', 'application/json');
    return this.http.get(this.baseUri+'/companies', {headers: headers})
    .map(res => res.json());
  }
Run Code Online (Sandbox Code Playgroud)

Arc*_*dze 11

TypeScript 上个月变得更加严格,所以现在的解决方案是:

dataSource: MatTableDataSource<any[]> = new MatTableDataSource<any[]>([]);
Run Code Online (Sandbox Code Playgroud)

或者您可以禁用--strictPropertyInitialization

  • 就我而言,将其更改为以下解决了问题: ```tableData: MatTableDataSource&lt;ArrivalReportInterface&gt; = new MatTableDataSource&lt;ArrivalReportInterface&gt;([]);``` (2认同)

小智 6

我以前也有类似的问题。
我通过设置解决了这个问题

dataSource: MatTableDataSource<any[]>;
Run Code Online (Sandbox Code Playgroud)

然后

this.dataSource = new MatTableDataSource(companies);
Run Code Online (Sandbox Code Playgroud)