尝试使用viewContainerRef.createComponent()

时间:2016-06-03 11:55:05

标签: angular angular2-components

我正试图在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)); } 未定义。我有什么问题吗?

更新2

好的,我设法通过重写这个方法来解决这个问题 -

this.comp

所以,我认为依赖注入就是这种情况。

0 个答案:

没有答案