Я пытался инициализировать членов компонента через декор @ViewChild, которые только что загрузились, однако кажется, что создание компонента задерживается, поэтому я получаю ошибку несуществующей переменной.
пример фрагмента родительского компонента:
{
...
dependOnData = null;
@ChildView('cview') child;
setWidgetData(data) {
dependOnData = new Object();
child.stuff = data;
}
...
}
Пример родительского компонента html:
<app-childthing *ngIf="dependOnData !==null; else somethingelse"
#cview>
</app-childthing>
<ng-template #soemthingelse>
....
</ng-template>
Итак, как вы можете видеть, дочерний элемент cview еще не существует вначале, но когда я инициализирую зависимостьOnData чем-то, не равным NULL, он должен быть создан, но я все равно получаю ошибки о несуществующем child.stuff.
какие-нибудь обходные пути?
Если вы хотите использовать @ViewChild, тогда используйте установщик и переместите свою логику в установщик.
@ViewChild('cview') set child(child: ChildType) {
if (child) {
child.stuff = data;
}
}
Или передайте данные непосредственно дочернему элементу через Input
, angular сделает привязку автоматически:
<app-childthing [stuff]="data" *ngIf="dependOnData !==null; else somethingelse">
</app-childthing>
<ng-template #soemthingelse>
...
</ng-template>