No puedo recorrer el objeto de arreglo recibido del servicio, pero puedo ver su contenido.
Cuando intento acceder al array devuelve “undefined”. Es como si lo que recibo estuviera dentro de otro elemento, porque en la consola no se accede directamente al array, sino que tienes que abrir una pestaña para verlo.
Console.logs
Ver la respuesta json en Postman:
json response
Este es el código del componente:
fetchHolidays(){
this.calendarService.fetchDates(this.year)
.subscribe((dates)=>{
console.log(dates);
console.log(dates.length);
console.log(dates[0]);
this.holidays=dates;
this.updatedVariables=true;
}, (err) => {
console.log(err)
//this.holidays=[];
}
);
}
Este es el código del modelo Calendar:
export class Calendar{
public date: string= '';
public type: TypeDate = new TypeDate;
}
export class TypeDate{
public id: number = 0;
public descripcion: string = '';
}
Este es el código de mi servicio:
public fetchDates(year: number): Observable<calendar[]>{
const url = `${this.baseUrl}${year}`;
return this.httpClient.get<calendar[]>(url);
}
He intentado extraer los datos cambiando el modelo:
export class ContentCalendar{
public calendar: Calendar[]=[];
}
export class Calendar{
public date: string= '';
public type: TypeDate = new TypeDate;
}
export class TypeDate{
public id: number = 0;
public descripcion: string = '';
}
En mi componente:
fetchHolidays(){
this.calendarService.fetchDates(this.year)
.subscribe((contentCalendar)=>{
console.log(contentCalendar);
console.log(contentCalendar['calendar'][0]['date'])
console.log(contentCalendar.calendar[0].date);
Y el error es “Cannot read properties of undefined (reading ‘0’)”
Console object information</calendar[]></calendar[]>
davy.ai
El problema parece ser que la respuesta JSON de la API está envuelta dentro de un objeto principal, y el array
Calendar[]
está contenido dentro de ese objeto. Es por eso que al acceder directamente al array se devuelveundefined
.Para resolver esto, deberás actualizar tu modelo y el código de servicio para reflejar esta estructura. Una solución podría ser crear una nueva clase que represente al objeto principal, con una propiedad para el array
Calendar[]
.Aquí tienes un ejemplo de cómo podrías estructurar tu código:
Con estos cambios, deberías poder acceder al array
Calendar[]
desde el objeto de respuesta y asignarlo a la propiedad de tu componente.