Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
81
rated 0 times [  82] [ 1]  / answers: 1 / hits: 9558  / 3 Years ago, wed, september 29, 2021, 12:00:00

with *ngFor, I cannot fetch the data from my component.ts to my component.html


The same method works for one class but does not work for another class.


Here is my service class


export class FoodListService {
private url = environment.serverURL;

constructor(private http: HttpClient) {
}

//get all products from one store
getAllProducts(storeId: Number): Observable<FoodListModelServer[]> {
return this.http.get<FoodListModelServer[]>(this.url + 'foodlist/' + storeId);
}

Here is my component class


export class FoodListComponent implements OnInit {

foodlist: FoodListModelServer[] = [];

constructor(private foodListService: FoodListService, private router: Router, private route: ActivatedRoute) {}

ngOnInit(): void {

this.foodListService.getAllProducts(this.storeId).subscribe(food => {

this.foodlist = food;
console.log(this.foodlist);
});
}
}


Here is my component.html


<div class="col-md-8 col-lg-10 col-sm-6 card">
<li *ngFor="let foodlist of foodlist">
{{foodlist.food_name}}

</li>
</div>


Console.log(this.foodlist)


I get and object {count: 5, stores: Array(5)}


Why do I get a count included forming an object instead of just the Array?


How do I get only the array?


I have same code with the other component and it works fine. I tried everything mentioned online with no progress.


More From » angular

 Answers
10

Why do I get a count included forming an object instead of just the
Array?




  • it depends on the implementation of API on the backend side



How do I get only the array?




  1. create interface for the actual response from API and use here this.http.get<FoodListModelServerResponse>

  2. then we can extract value from response via RxJs map operator - map(response => response.stores) (find more info here: https://www.learnrxjs.io/learn-rxjs/operators/transformation/map)

  3. that is it, you can subscribe to getAllProducts and you will get the array


import { map } from 'rxjs/operators';

export interface FoodListModelServerResponse {
count: number;
stores: FoodListModelServer[];
}

export class FoodListService {
private url = environment.serverURL;

constructor(private http: HttpClient) {
}

getAllProducts(storeId: Number): Observable<FoodListModelServer[]> {
return this.http.get<FoodListModelServerResponse >(this.url + 'foodlist/' + storeId)
.pipe(map(response => response.stores));
}

then you can use your implementation


ngOnInit(): void {

this.foodListService.getAllProducts(this.storeId).subscribe(food => {

this.foodlist = food;
console.log(this.foodlist);
});
}
}

[#815] Wednesday, September 22, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
brookelynshaem

Total Points: 468
Total Questions: 98
Total Answers: 101

Location: China
Member since Mon, Aug 22, 2022
2 Years ago
brookelynshaem questions
;