169 похожих чатов

Привет,У меня есть компонент в который я Input() передаю, на

нем стоит такое
<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 с проверкой?

3 ответов

8 просмотров

Компонент не знает, что снаружи есть проверка. И по-умолчанию, он ожидает, что Input() может отсутствовать. Надо или значение по умолчанию указать, или делать проверку внутри компонента. @Input() someInput: SomeType[] = [];

Taras-Savchenko Автор вопроса
Misha Aksenov
Компонент не знает, что снаружи есть проверка. И п...

ага, типа ngIf пропускает и до того, пока через инпут передались данные, компонент уже прогружается? данные с Input же доходят в AfterViewInit вроде

Taras Savchenko
ага, типа ngIf пропускает и до того, пока через ин...

1. ngIf тут ни при чём. Он находится снаружи компонента и компонент о нём ничего не знает. 2. Декоратор Input, по сути, добавляет undefined к типу поля, так как в шаблоне можно не указать значение и это абсолютно нормально. И этот потенциальный undefined как раз заставляет разработчика предусмотреть такую ситуацию. 3. Насколько я помню, инпуты прокидываются ещё на ngOnChanges. В твоей ситуации можно сделать так, как я писал в предыдущем сообщении, указать дефолтное значение - пустой массив. Либо же можно забить на это, написать вот так: @Input() someInput!: SomeType[]; Это будет явное указание на то, что значение там точно будет. Но это не совсем безопасно, так как если по какой-то причине значения там вдруг не окажется - компонент будет падать с ошибкой глубже в логике.

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта