[Angular] pobieranie danych z rest Api

0

mam w service

  getEmployeesList(): Observable<any> {
    return this.http.get(`${this.baseUrl}`);
  }

w widoku wszystkich pracowników:

  ngOnInit() {
    this.reloadData();
  }

  reloadData() {
    this.employees = this.employeeService.getEmployeesList();
  }

w htmlu:

<tr *ngFor="let employee of employees | async">
          <td>{{employee.name}}</td>
          <td>{{employee.lastname}}</td>
          <td>{{employee.email}}</td>
          <td><button (click)="deleteEmployee(employee.id)">Delete</button></td>
        </tr>

i nie chce mi pobrać danych:
wyskakuje błąd:

ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
1

Zupełnie się nie znam, ale założę się o dychę, że API zwraca Ci obiekt zamiast tablicy :)

0

Właśnie tyle się zorrientowałam... ponoć jakoś subscribe i .map można to przekonwertować, ale nie mam pomysłu jak to ma wyglądać.

1

Kombinuj, pomocy nie brakuje: https://angular.io/guide/rx-library Niestety nie podałaś, jakie dane zwraca Twoje API, wiec ciężko nawet podać gotowe rozwiązanie.

0

Zwraca jsona
np:

{
"success": true,
"data": [
{
"id": 1,
"name": "X",
"lastname": "Y",
"email": "[email protected]"
}
],
"msg": "Cała lista"
}

2

No wyciągnij ta listę użytkowników z tego jsona

reloadData() {
    this.employees = this.employeeService.getEmployeesList().data;
  }
0

pomogło coś innego
W szablonie umieściłam:

        <tr *ngFor="let employee of (employees | async).data">

tylko nadal mam błędy w konsoli:

ERROR TypeError: Cannot read property 'data' of null

I nie wiem dlaczego nie może czytać jak widać dane

0

coś takiego?

 reloadData() {
   this.employeeService.getEmployeesList().subscribe(res => this.employees = res.data);
  }
0

Zrób sobie interfejs, który by Ci odzwierciedlał response z API - będzie Ci łatwiej potem z tego korzystać. Skorzystaj tak jak wcześniej wspomniałaś z pipe i map:

this.employees$ = this.http.getEmployees().pipe(map(employees => employees.data));

Wtedy w template masz:

<ng-container *ngFor="let employee of employees | async">
<tr>{{employee}}</tr>
</ng-container>

1 użytkowników online, w tym zalogowanych: 0, gości: 1