Javascript 在*ngIf执行后检测何时加载组件

Javascript 在*ngIf执行后检测何时加载组件,javascript,angular,typescript,Javascript,Angular,Typescript,我试图通过刚刚加载的@ViewChild decor初始化组件的成员,但是组件的创建似乎延迟了,所以我最终遇到了不存在的变量错误 示例父组件代码段: { ... dependOnData = null; @ChildView('cview') child; setWidgetData(data) { dependOnData = new Object(); child.stuff = data; } .

我试图通过刚刚加载的@ViewChild decor初始化组件的成员,但是组件的创建似乎延迟了,所以我最终遇到了不存在的变量错误

示例父组件代码段:

{
   ...
   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 child最初还不存在,但当我将Dependenda初始化为非null时,它应该被实例化,但我仍然会得到关于child.stuff不存在的错误


任何解决方法?

如果要使用@ViewChild,请使用setter并将逻辑移动到setter

@ViewChild('cview') set child(child: ChildType) {
    if (child) {
        child.stuff = data;
   } 
}
或者通过
输入将数据直接传递给孩子,angular将自动进行绑定:

<app-childthing [stuff]="data" *ngIf="dependOnData !==null; else somethingelse">
</app-childthing>

<ng-template #soemthingelse>
    ...
</ng-template>

...

我假设这是一个Angular2或更大的项目?如果是这样-您应该删除angularjs标记,因为这是一个完全不同的框架。@StephenR.Smith我刚刚做了:)@j-dar-rodriguez您是在尝试将数据传递给子组件还是在子组件上调用方法?或者?为什么不简单地通过父级的
@输入
stuff
传递给子组件呢?我假设
@ChildView
应该是
@ViewChild
。我知道,问题是最初的app-childthing还不存在,因为*ngIF,所以它们没有对象可供参考。是的,我理解,这就是我在回答中使用setter的原因,不过我会使用输入绑定,因为它更简单。