I have been working on a project with Angular. But my project doesn't work like it should. I get the error "ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays." in the console of my page.
On my page I get the "This works" but that's it. Meanwhile I should also see the 'soort' of my 'dier'.
In my html:
<p>This works</p>
<div
class="dier"
*ngFor="let dier of dieren$">
<p>{{dier.soort}}</p>
</div>
The component (without imports and @Component):
export class DierListComponent implements OnInit {
private _fetchdieren$: Observable<Dier[]>; // = this._dierDataService.dieren$;
public errorMessage: string = '';
constructor(private _dierDataService: DierDataService) {
}
get dieren$(): Observable<Dier[]>{
return this._fetchdieren$;
}
addNiewDier(dier){
this._dierDataService.addNewDier(dier);
}
ngOnInit(): void {
this._fetchdieren$ = this._dierDataService.dieren$.pipe(
catchError(err => {
this.errorMessage = err;
return EMPTY;
})
);
}
}
And the dataservice (without imports, @injectable and some (unimportant methods):
export class DierDataService {
private _dieren$ = new BehaviorSubject<Dier[]>([]);
private _dieren: Dier[];
constructor(private http: HttpClient) {
this.dieren$.subscribe((dieren: Dier[]) => {
this._dieren = dieren;
this._dieren$.next(this._dieren);
});
}
/* get allDieren$(): Observable<Dier[]> {
return this._dieren$;
}*/
get dieren$(): Observable<Dier[]>{
return this.http.get(`${environment.apiUrl}/Dieren`).pipe(
catchError(this.handleError),
tap(console.log),
map(
(list: any[]): Dier[] => list.map(Dier.fromJSON)
)
);
}
handleError(err: any): Observable<never> {
let errorMessage: string;
if (err instanceof HttpErrorResponse) {
errorMessage = `'${err.status} ${err.statusText}' when accessing '${err.url}'`;
} else {
errorMessage = `an unknown error occurred ${err}`;
}
console.error(err);
return throwError(errorMessage);
}
}
Can Anyone please help me? I have been stuck on this for days now. Thank you!
*ngForwith an observable, you use theasyncpipe. Like so:*ngFor="let dier of dieren$ | async"- R. Richards