Проблема в том, что вы устанавливаете this.forecastImg
, где this
- это компонент, а не forecast
. А во время цикла вы просто переопределяете изображение (на самом деле вы должны получить последнее изображение для всех элементов, а не первое)
Что вам нужно сделать, это создать список изображений / прогнозов, а не только одно изображение. Я предполагаю, что this.forecasts
является результатом некоторого http-вызова, поэтому давайте просто создадим новую переменную в верхней части вашего контроллера (вместо forecastImg
). Я также предлагаю использовать объект для поиска значков вместо if / else:
// ideally you create an interface for a forecast
forecastItems: any[] = [];
// create an object for the icons that you can use for lookups
icons = {
'rain': 'http://icons.iconarchive.com/icons/icons8/ios7/96/Weather-Rain-icon.png',
'clouds': 'http://icons.iconarchive.com/icons/icons8/windows-8/96/Weather-Clouds-icon.png'
}
Я буду использовать ES6 для просмотра прогнозов и присвоения изображения нашему массиву
for (let item of this.forecasts.list) {
// here we could use that interface again
const forecastItem = {
'title': item.weather[0].main,
'icon': ''
}
// assign the icon if we have one
try {
forecastItem['icon'] = this.icons[forecastItem.title.toLowerCase()];
} catch (e) {}
// store the object in our helper array
this.forecastItems.push(forecastItem);
}
Теперь у вас есть массив прогнозов с заголовком и значком, который вы используете в своем шаблоне:
<div *ngFor="let forecast of forecastItems">
<div class="col-md-3 col-sm-6 mb-4">
<a href="#">
<img class="img-fluid" bind-src="forecast.icon" alt="{{ forecast.title }}">
</a>
<div>
<div>