Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

196
Visualizações
Error al intentar diferenciar '[objeto Objeto]'. Solo se permiten matrices e iterables en la aplicación Angular-11

con *ngFor, no puedo obtener los datos de mi componente.ts en mi componente.html

El mismo método funciona para una clase pero no funciona para otra clase.

Aquí está mi clase de servicio

 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); }

Aquí está mi clase de componente

 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); }); } }

Aquí está mi componente.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(esta.listadealimentos)

Obtengo y objeto {recuento: 5, tiendas: Array(5)}

¿Por qué obtengo un conteo incluido que forma un objeto en lugar de solo el Array?

¿Cómo obtengo solo la matriz?

Tengo el mismo código con el otro componente y funciona bien. Intenté todo lo mencionado en línea sin ningún progreso.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

¿Por qué obtengo un conteo incluido que forma un objeto en lugar de solo el Array?

  • depende de la implementación de la API en el backend

¿Cómo obtengo solo la matriz?

  1. cree una interfaz para la respuesta real de la API y use aquí this.http.get<FoodListModelServerResponse>
  2. luego podemos extraer valor de la respuesta a través del operador de map RxJs - map(response => response.stores) (encuentre más información aquí: https://www.learnrxjs.io/learn-rxjs/operators/transformation/map )
  3. eso es todo, puede suscribirse a getAllProducts y obtendrá la matriz
 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)); }

entonces puedes usar tu implementación

 ngOnInit(): void { this.foodListService.getAllProducts(this.storeId).subscribe(food => { this.foodlist = food; console.log(this.foodlist); }); } }
about 4 years ago · Juan Pablo Isaza Relatório

0

Utilice el operador de extracción de RxJs para extraer las stores del objeto de respuesta. Declare la variable lista de alimentos como foodlist$: Observable<FoodListModelServer[]> foodlist que se pueda asignar a observable.

En foodService devuelve Observable<any> como getAllProducts(storeId: Number): Observable<any>

 import { pluck} from 'rxjs/operators'; import { Observable } from 'rxjs'; export class FoodListComponent implements OnInit { foodlist$: Observable<FoodListModelServer[]>; constructor(private foodListService: FoodListService, private router: Router, private route: ActivatedRoute) {} ngOnInit(): void { this.foodlist$ = this.foodListService.getAllProducts(this.storeId).pipe( pluck('stores') ); } }

En el uso de la plantilla Async pipe , se encargará de suscribirse y cancelar la suscripción a su foodListService.getAllProducts

 <div class="col-md-8 col-lg-10 col-sm-6 card"> <li *ngFor="let foodlist of foodlist$ | async"> {{foodlist.food_name}} </li> </div>
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda