1
resposta

Cannot read property 'dataRows' of undefined

Eu tenho um componente com uma dataTable que implementa a interface, a seguir:

declare interface DataTable {
  headerRow: string[];
  footerRow: string[];
  dataRows: String [] []; //Uma matriz de strings com cada linha sendo uma linha da tabela.
}

Minha classe possui os atributos:

export class UserListComponent implements OnInit, AfterViewInit {
    public dataTable: DataTable;
    public userList: Object[]; //Array de objetos
...

Eu preencho as linhas da tabela com um array de objetos vindo de uma requisição http através da classe de serviços.

 ngOnInit() {
       this._userListService
            .getList()
            .subscribe(res => {
                this.userList = res; // aqui é retornado pelo serviço uma lista de objetos
                }, error => console.log(error),
                () => 
                {
           //aqui eu transformo a lista de objetos numa matriz de linhas databela
                    let arr:string[][] = [];
                    this.userList.forEach(p => {
                        var arr2: string[] = [];
                        for(let key in p){
                            arr2.push(p[key].toString());
                        }
                        arr.push([].concat(arr2));
                    });

                    this.dataTable = {
                        headerRow: [ 'Name', 'Position', 'Office', 'Age', 'Date', 'Actions' ],
                        footerRow: [ 'Name', 'Position', 'Office', 'Age', 'Start Date', 'Actions' ],
                        dataRows: [].concat(arr) //Aqui eu associo a matriz transformada às linhas da tabela
                    } 
                }
            );

E no template:

  <tr *ngFor="let row of dataTable.dataRows">
            <td>{{row[0]}}</td>
            <td>{{row[1]}}</td>
            <td>{{row[2]}}</td>
            <td>{{row[3]}}</td>
            <td>{{row[4]}}</td>
....

Quando acesso a página, aparece no console a seguinte mensagem de erro> ERROR TypeError: Cannot read property 'dataRows' of undefined

Onde eu errei?

1 resposta

Wagner, consegue testar se a sua dataTable está recebendo os valores antes de implementar no template?