“对象”类型的 Angular 6 和 Angular Material Mat 表数据源参数不可分配给“{}[]”类型的参数

ali*_*990 1 datasource angular-material angular angular6

我从 MySQL 数据库获取用户列表以<mat-table>使用dataSource属性显示它:

以下是 typescript 方法getUnitData(),我将 dataSource 值设置为从 PHP 脚本返回的 JSON 数组:

export class RegistrationComponent implements OnInit {
  dataSource: MatTableDataSource<units>;

  @ViewChild(MatPaginator) paginator: MatPaginator;
  @ViewChild(MatSort) sort: MatSort;
  constructor(private auth: AuthApiService) { }

  ngOnInit() {
    this.dataSource.paginator = this.paginator;
    this.dataSource.sort = this.sort;
  }

  applyFilter(filterValue: string){
    this.dataSource.filter = filterValue.trim().toLowerCase();

    if(this.dataSource.paginator)
    {
      this.dataSource.paginator.firstPage();
    }
  }

  getUnitData(){
    this.auth.getUnitDataService().subscribe(
      (data)=>
      {
        this.dataSource = new MatTableDataSource(data);
      },
      (error)=>
      {

      }
    )
  }

}
Run Code Online (Sandbox Code Playgroud)

这是来自的主要方法AuthApiService

getUnitDataService(){
    if(this.checkIsLogin){
      this.headerOptions.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');

      return this.http.get(this.globalVar.getUnitData,{
        headers: this.headerOptions
      });
    }
    else{
      this.router.navigate(['/login']);
    }
  }
Run Code Online (Sandbox Code Playgroud)

PHP脚本是:

public function getUnitData($conn)
{
    try{
        $sql = "SELECT * FROM unit ORDER BY unit_id DESC";
        $getData = $this->conn->prepare($sql);
        $getDataResult = $getData->execute();
        $getDataSize = $getDataResult->rowCount();
        $getDataResult->fetchAll();

        return $getDataResult;
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在另一个文件中使用以下URL调用:this.globalVar.getUnitData

我得到的错误如下:

1.

[ts] 找不到名称“单位”。

2.

“Object”类型的参数不能分配给“any[]”类型的参数。“对象”类型可分配给很少的其他类型。您是想改用“any”类型吗?“对象”类型中缺少属性“长度”。

我在堆栈上尝试了这个解决方案,但仍然有同样的错误。

W K*_*nny 6

我遇到了同样的问题,我通过这种方式解决了它:

new MatTableDataSource(<any> response);
Run Code Online (Sandbox Code Playgroud)