Я работаю над погодным приложением angualr. для которого я создал класс погоды
export class Weather{
city: string;
condition: string;
icon: string;
temp: number;
}
и я делаю запрос http API для получения подробной информации о погоде.
я импортировал этот класс Weather
и хочу назначить поля в соответствии с объектом json из вызова API.
так.
weather:Weather;
getWeather():void{
this.weatherserv.getWeather().subscribe(data=>{
this.weather.city=data.location.name;
this.weather.condition=data.condition.text;
this.weather.condition=data.condition.icon;
this.weather.temp=data.current.temp_c;
})
}
Ошибка, которую я получаю:
Error: Cannot set property 'city' of undefined
Ты должен попытаться:
weather= new Weather();
или в вашем случае лучше использовать интерфейсы:
export interface Weather{
city?: string;
condition?: string;
icon?: string;
temp?: number;
}
weather:Weather = {};
здесь я объяснил, почему в вашем случае лучше использовать интерфейсы.
да, здесь лучше использовать интерфейсы, а не класс, я думаю, что это должен быть принятый ответ.
вы должны создать новый объект из своего класса, а затем установить для него значения.
попробуй это:
weather: Weather = new Weather();
getWeather():void{
this.weatherserv.getWeather().subscribe(data=>{
this.weather.city=data.location.name;
this.weather.condition=data.condition.text;
this.weather.condition=data.condition.icon;
this.weather.temp=data.current.temp_c;
})
}
Это должен был быть принятый ответ. +1 за использование интерфейса вместо класса