我正试图在DynamicComponentLoader
这样的组件内按钮点击动态加载模态窗口组件 -
openUploadDialog() {
this._loader.loadAsRoot(MyDialog, '#upload-image', this._injector).
then((c:ComponentRef<MyDialog>) => {
c.instance.openModal();
});
}
MyDialog组件 -
@ViewChild('dialog') dialog: ElementRef;
openModal() {
if (!this.dialog.nativeElement.showModal) {
dialogPolyfill.registerDialog(this.dialog.nativeElement);
}
this.dialog.nativeElement.showModal();
}
但是我收到了错误 - Cannot read property 'nativeElement' of undefined
。起初我以为当时没有创建对话框ViewChild元素,所以我尝试将开头部分移动到ngAfterViewInit
事件处理程序。但是我注意到,那些事件处理程序(ngOnInit
等)在使用 DynamicComponentLoader
创建的组件时不会被调用,或者它可能只用{ {1}}方法,不能肯定地说。我没有尝试loadAsRoot
因为我需要在这个内部创建组件。
这个问题有解决办法吗?
感谢GünterZöchbauer的链接,我做了以下更改 -
loadNextToLocation
但是现在我的 @ViewChild('dialog-container', {read: ViewContainerRef}) dialog;
openUploadDialog() {
this._resolver.resolveComponent(MyDialog)
.then(fact => this.comp = this.dialog.createComponent(fact))
.then(res => console.log(res));
}
未定义。我有什么问题吗?
好的,我设法通过重写这个方法来解决这个问题 -
this.comp
所以,我认为依赖注入就是这种情况。