#angular
#angular
Вопрос:
Я получаю ошибку в моем VSCode, хотя моя страница, кажется, работает правильно. Я предполагаю, что я делаю что-то неправильно, хотя все работает.
Я пытаюсь поместить объекты в новый массив вне моей функции ngOnInit, а затем использовать этот массив в моем компоненте с циклом * ngFor. Однако в моем компоненте я получаю сообщение об ошибке «Идентификатор ‘time’ не определен. «не содержит такого элемента». В моих переменных.
Я предполагаю, что это как-то связано с жизненным циклом событий, возможно, в то время, когда информации там нет?
В любом случае, вот код, с которым я работаю:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { WeatherService } from '../weather.service';
import { Subscription } from 'rxjs';
import * as moment from 'moment';
import { _ } from 'underscore';
@Component({
selector: 'app-forecast',
templateUrl: './forecast.component.html',
styleUrls: ['./forecast.component.css']
})
export class ForecastComponent implements OnInit, OnDestroy {
private weatherSub: Subscription;
constructor(public weatherService: WeatherService) { }
daysOfWeek = [];
ngOnInit() {
this.weatherSub = this.weatherService.getWeatherListener()
.subscribe((weather: any) => {
const daysOfWeekData = weather.weekData.data;
const slicedDaysOfWeek = daysOfWeekData.slice(1, 6);
_.each(slicedDaysOfWeek, (day) => {
const days = moment.unix(day.time).format('dddd');
day.time = days;
this.daysOfWeek.push(day);
});
});
}
}
Вот код компонента:
<div class="forecast-container">
<div
*ngFor="let day of daysOfWeek"
class="day-container"
>
<p>{{day.time}}</p>
<i class="wi wi-showers"></i>
<p>{{day.apparentTemperatureHigh}}</p>
<p>{{day.apparentTemperatureLow}}</p>
</div>
</div>
Как вы можете видеть, код работает, поскольку я получаю данные о погоде. Однако эта ошибка меня пугает.
Есть предложения?
Комментарии:
1. Рассматривали ли вы возможность создания интерфейсов / классов для представления ожидаемых данных и манипулирования ими вместо использования
any
?2. @AlexanderStaroselsky нет, я не рассматривал это, решит ли это ошибку?
3. Вы пробовали put
daysOfWeek = [];
в constructor?4. @Sebastianor Нет, я этого не делал, это правильный способ сделать это?
5. Я бы действительно рекомендовал создавать интерфейсы / классы для использования вместо
any
. Это не только обеспечит преимущества набора текста и автозаполнение TypeScript. Вам не нужно перемещать это в конструктор. Если вы объявите в конструкторе, вы не сможете использовать его в другом месте. Также можете ли вы поделиться точной ошибкой, обновите свой вопрос с этим?
Ответ №1:
Typescript должен знать тип массива
public daysOfWeek: any[] = [];
или
interface Day {
time: string;
apparentTempertureHight: number;
apparentTempertureLow: number;
}
затем
public daysOfWeek: Day[] = [];
Комментарии:
1. Я все еще получаю ошибку VSCode с первой.
2. В зависимости от ваших расширений tsconfig s и VSCode
any
может быть недостаточно конкретным. Я не видел этой ошибки о ‘<anonymous>’, Вам нужно опубликовать более полный проект для дублирования.