javascript - 检测 *ngIf 执行后何时加载组件
问题描述
我试图通过刚刚加载的@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 child 最初还不存在,但是当我将dependOnData 初始化为非空值时,它应该被实例化,但我仍然收到有关 child.stuff 不存在的错误。
任何解决方法?
解决方案
如果您想使用 @ViewChild,请使用 setter 并将您的逻辑移动到 setter。
@ViewChild('cview') set child(child: ChildType) {
if (child) {
child.stuff = data;
}
}
或者通过 Angular 将数据直接传递给孩子Input
,它会自动进行绑定:
<app-childthing [stuff]="data" *ngIf="dependOnData !==null; else somethingelse">
</app-childthing>
<ng-template #soemthingelse>
...
</ng-template>
推荐阅读
- cakephp - 如何在 cakephp 3.x 中完全禁用缓存
- javascript - 如何在 Javascript 中跳转到不同的行?
- protractor - 如何在其中找到按钮
- 和
- 通过量角器?
- couchdb - fauxton 中是否有用于 CouchDb 的列表、显示和更新功能编辑器?
- sql-server - xp_cmdshell bcp 可以处理“<”吗?
- r - 如何根据单独数据框中的两列重新编码数据框中的值?
- angular - 如何在 Angular8 中渲染多个 Plotly 图?
- hibernate - 删除主实体时如何将子实体保留在数据库中
- angular - Angular syncfusion - 获取折线图选择系列的事件是什么?
- github - 如何搜索提交历史?