Таблица 5 Источник данных Angular 6 и Angular Material Mat Аргумент типа «Объект» нельзя назначить параметру типа «{} []» - PullRequest
0 голосов
/ 03 сентября 2018

Я получаю список пользователей из базы данных MySQL для отображения его в <mat-table>, используя свойство dataSource:

Ниже приведен метод машинописного ввода getUnitData(), где я устанавливаю значение dataSource в качестве возвращаемого массива JSON из сценария PHP:

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)=>
      {

      }
    )
  }

}

А вот основной метод из 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']);
    }
  }

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();
    }
}

А потом я звоню в другой файл, используя следующий URL: this.globalVar.getUnitData.

Я получаю следующие ошибки:

1.

[ts] Не удается найти имя «единицы измерения».

2.

Аргумент типа «Объект» не может быть назначен параметру типа 'любой[]'. Тип «Объект» назначается очень немногим другим типам. Вы хотели использовать вместо этого любой тип? Свойство «длина» отсутствует в типе «Объект».

Я попытался это решение в стеке, но все еще с той же ошибкой.

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

У меня возникла та же проблема, и я решил ее следующим образом:

new MatTableDataSource(<any> response);
0 голосов
/ 22 июня 2019

У меня была такая же проблема, и я решил ее таким образом

report: any = new MatTableDataSource()
0 голосов
/ 03 сентября 2018

Вы пытались создать новый MatTableDataSource, где инициализируется dataSource var, MatPaginator и MatSort инициализируются в ngAfterViewInit, а затем в методе обслуживания вызывают this.dataSource.data = data

    export class RegistrationComponent implements OnInit {
     //  dataSource: MatTableDataSource<units>;
         dataSource = new MatTableDataSource<units>();

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

      ngAfterViewInit() {
       // add ngAfterViewInit hook
          this.dataSource.paginator = this.paginator;
          this.dataSource.sort = this.sort;
      }

     ngOnInit() {

    }

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

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

 getUnitData(){
   this.auth.getUnitDataService().subscribe(
    (data)=>
   {
     //get data from service pass it to dataSouce.data Object
     this.dataSource.data = data;
   },
    (error)=>
    {

    }
    )
  }

 }
...