Angular调用子组件ModalComponent方法时出现undefined错误的解决方法
解决HomeComponent调用ModalComponent close方法的undefined问题
问题根源及修正步骤:
ModalComponent拼写错误
close方法中变量名写错,closeNodal应为closeModal(与@ViewChild定义的变量名一致),修正后代码:close() { this.closeModal.nativeElement.click(); }HomeComponent的@ViewChild选择器错误
原代码用@ViewChild('ModalComponent'),但模板中未给app-modal设置对应模板引用变量。有两种修正方式:- 方式一:给模板中的
app-modal添加模板引用变量,再通过变量获取组件实例
HomeComponent.html修改:
HomeComponent.ts修改@ViewChild:<app-modal #modal name="personAdd" title="Person Add Form"> <p>FORM ELEMENTS </p> <button (click)="PersonMovementAdd()">Add</button> </app-modal>@ViewChild('modal') modalComponent: ModalComponent; - 方式二:直接通过组件类获取实例(适用于HomeComponent中仅存在一个ModalComponent实例的场景)
@ViewChild(ModalComponent) modalComponent: ModalComponent;
- 方式一:给模板中的
Add按钮未绑定点击事件
原模板中的Add按钮没有触发PersonMovementAdd方法,需添加(click)绑定,如上述代码所示。可选:避免组件未初始化导致的undefined
可在调用close方法前增加判断,防止意外报错:PersonMovementAdd() { this.modalComponent?.close(); // 使用可选链操作符,或用if判断 }
内容的提问来源于stack exchange,提问作者Öner Taş
相关产品推荐
相关产品推荐

