Javascript 在*ngIf执行后检测何时加载组件
我试图通过刚刚加载的@ViewChild decor初始化组件的成员,但是组件的创建似乎延迟了,所以我最终遇到了不存在的变量错误 示例父组件代码段:Javascript 在*ngIf执行后检测何时加载组件,javascript,angular,typescript,Javascript,Angular,Typescript,我试图通过刚刚加载的@ViewChild decor初始化组件的成员,但是组件的创建似乎延迟了,所以我最终遇到了不存在的变量错误 示例父组件代码段: { ... dependOnData = null; @ChildView('cview') child; setWidgetData(data) { dependOnData = new Object(); child.stuff = data; } .
{
...
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的原因,不过我会使用输入绑定,因为它更简单。