В массиве данных допускаются только массивы и итерации - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь сделать грубую операцию с использованием данных.Когда я нажимаю на кнопку отправки для создания, она показывает мне ошибку В массиве данных допускаются только массивы и итерации.Консоль показывает ошибку в файле component.html, где строка кода:

component.html

<table datatable [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" 
class="row-border hover"> //This is where the console shows error

<tbody>
  <tr *ngFor="let person of persons">
   <td>{{ person.id }}</td>
   <td>{{ person.name}}</td>
   </tr>
</tbody>

component.ts

 dtOptions: DataTables.Settings = {};
 persons: any = [];

 // We use this trigger because fetching the list of persons can be 
 quite long,
 // thus we ensure the data is fetched before rendering

 dtTrigger: any = new Subject();

 constructor(private Authentication:AuthService) { }


 ngOnInit(): void {

 this.getRolesFromServices();
this.dtOptions = {
  pagingType: 'full_numbers',
  pageLength: 4
};
this.Authentication.getRoleData()
  .map(this.extractData)
  .subscribe(persons => {
    this.persons = persons;
    // Calling the DT trigger to manually render the table
    this.dtTrigger.next();
  });

 }

 ngOnDestroy(): void {
 // Do not forget to unsubscribe the event
 this.dtTrigger.unsubscribe();
 }

 private extractData(res: Response) {
 const body = res;
 return body || {};
 }

Я могу создавать данные, и они добавляются, но они не отображаются на странице.Отображается только при обновлении.

1 Ответ

0 голосов
/ 13 октября 2018

Если getRoleData вернет ноль или пустую строку или в общем случае ложный результат extractData вернет объект, а не пустой массив

private extractData(res: Response) {
 const body = res;
 return body || {}; // this cause only arrays and iterables are allowed in datatable
 }

просто измените это так, как это

private extractData(res: Response) {
 const body = res;
 return body || [];
 }
...