[英]Calling Child Component Method From Parent Methods Angular 8
我需要从我的父组件调用子组件方法并且需要发送 object。 我有下面的代码给我这个错误:无法读取未定义的属性'RunMe'
我错过了什么?
子组件:
runMe = (item) => {
this.cdr.detectChanges();
if (item.hidden) {
this.showErrorMsgEvent.emit();
} else {
this.highLightEvent.emit(item);
}
}
家长:
@ViewChild(childComponent, { static: true }) childComponent;
ListenIframeEvents(){
window.addEventListener("message", this.displayMessage, false)
}
displayMessage (item) {
this.childComponent.RunMe(item)
}
<child-component #childComponent></child-component>
我用谷歌搜索了大多数答案,建议添加 # 选择器,但这对我不起作用。
仅供参考:如果我在 ngOnInit() 下运行 this.childComponent.RunMe() 这个 function 它可以工作。 所以我不明白我做错了什么
问题在于window.addEventListener("message", this.displayMessage, false)
将其更改为window.addEventListener("message", this.displayMessage.bind(this), false)
更新:
当您将方法作为参数传递给 function 时,它将丢失其上下文( this
)。 为了强制使用我们的上下文,我们使用.bind()
使其上下文 ( this
) 显式。
有关更多信息,请查看https://www.javascripttutorial.net/javascript-this/
这里有两个可能的问题。
第一个是:子组件位于某些结构指令下,例如 *ngIf。 这里将孩子标记为{static: false}
应该可以解决问题。
另一种情况是您过早地使用“displayMessage”方法,此时您的父模板尚未呈现。 如果是这样,请将this.displayMessage(...)
调用放在ngAfterViewInit
angular 生命周期挂钩中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.