У меня есть сценарий, в котором я использую компонент, встроенный в мой шаблон html, и я хочу, чтобы он был скрыт, пока не будет установлен флажок. ОДНАКО, есть условие, которое определяет, должен ли "showControl" быть установлен в значение true или нет ... Условие определяется путем вызова метода элемента управления (здесь сценарий с курицей и яйцом).
HTML выглядит следующим образом:
<input type = "checkbox" (click) = "clickBox()" />
<div *ngIf = "showControl">
<app-sample #appsampleref></app-sample>
</div>
И код .ts выглядит следующим образом:
@ViewChild(appsampleref) appSampleControl: AppSampleComponent;
clickBox() {
if (this.appSampleControl.someMethod()) {
this.showControl = true;
}
}
Приведенный выше код дает мне следующую ошибку:
ERROR TypeError: Unable to get property 'someMethod' of undefined or null reference
Как мне обойти этот сценарий, поскольку Angular, очевидно, не инициализирует мой элемент управления, пока он не будет показан.
Заранее благодарим за любые указатели! :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно сохранить элемент в dom и просто переключить его видимость! Вместо *ngIf используйте [hidden]. *ngIf фактически добавит или удалит элемент из dom, в то время как [hidden] только переключит свойство display для элемента. Обратите внимание, что *ngIf будет показывать для элемента, если он оценивается как истинный, а [hidden] будет Спрятать для элемента, если он оценивается как истинный.
Итак, в вашем коде используйте [hidden] = "!showControl" вместо оператора *ngIf. Однако я бы изменил код машинописного текста и имя переменной, чтобы вам не приходилось отрицать это в шаблоне HTML.
Что произойдет, если вы замените
*ngIf = "showControl"на[hidden] = "!showControl".[hidden]просто переключает свойство отображения элемента, в то время как*ngIfфактически добавляет / удаляет элемент из dom.