Определить, когда компонент загружается после выполнения * ngIf

-1

Я пытался инициализировать членов компонента через декор @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.

какие-нибудь обходные пути?

  • 0
    Я предполагаю, что это проект Angular2 или выше? Если это так - вы должны удалить тег angularjs, поскольку это совершенно другая структура.
  • 1
    @ StephenR.Smith я только что сделал :)
Показать ещё 5 комментариев
Теги:
angular

1 ответ

2

Если вы хотите использовать @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>
  • 0
    Я знаю, что проблема в том, что изначально app-childthing еще не существует из-за * ngIF, поэтому они не являются объектом, на который можно ссылаться.
  • 0
    Да, я понимаю, поэтому я использую сеттер в своем ответе
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню