нем стоит такое
<app-investment-opportunities
*ngIf="investmentOpportunities$ | async as investmentOpportunities"
[investmentOpportunitites]="investmentOpportunities"
</app-investment-opportunities>
В самом компоненте:
@Input() investmentOpportunities: GetInvestmentOpportunitiesResponse[];
---
<div>{{ investmentOpportunities[0].statusOffering }}</div>
И оно выкидывает
core.js:4197 ERROR TypeError: Cannot read property '0' of undefined
Вопрос: Как оно может быть undefined вообще, если на самом компоненте стоит ngIf с проверкой?
Компонент не знает, что снаружи есть проверка. И по-умолчанию, он ожидает, что Input() может отсутствовать. Надо или значение по умолчанию указать, или делать проверку внутри компонента. @Input() someInput: SomeType[] = [];
ага, типа ngIf пропускает и до того, пока через инпут передались данные, компонент уже прогружается? данные с Input же доходят в AfterViewInit вроде
1. ngIf тут ни при чём. Он находится снаружи компонента и компонент о нём ничего не знает. 2. Декоратор Input, по сути, добавляет undefined к типу поля, так как в шаблоне можно не указать значение и это абсолютно нормально. И этот потенциальный undefined как раз заставляет разработчика предусмотреть такую ситуацию. 3. Насколько я помню, инпуты прокидываются ещё на ngOnChanges. В твоей ситуации можно сделать так, как я писал в предыдущем сообщении, указать дефолтное значение - пустой массив. Либо же можно забить на это, написать вот так: @Input() someInput!: SomeType[]; Это будет явное указание на то, что значение там точно будет. Но это не совсем безопасно, так как если по какой-то причине значения там вдруг не окажется - компонент будет падать с ошибкой глубже в логике.
Обсуждают сегодня