我知道已经提出了很多类似的问题,而且我现在已经搜索了很长一段时间来尝试所有可能的解决方案,但它仍然无法正常工作。大多数解决方案都涉及添加entryComponent
或将其添加到组件本身的entryComponent
(不良做法),但两者都没有帮助。
所以我一直试图植入与此相同的技术:plunkr。
我的代码:
app.module.ts
@NgModule({
declarations: [
AppComponent,
****
ArtworkWrapperComponent,
TestComponent
],
imports: [
***
],
entryComponents: [TestComponent],
providers: [Animations, PageNameService],
bootstrap: [AppComponent]
})
export class AppModule { }
所以TestComponent
是我试图根据输入值显示的内容,这是由与Plunkr示例中的DclWrapper相同的类处理的。
我在这个项目中使用Angular CLI(可能是相关的):
angular-cli: 1.0.0-beta.24
node: 6.2.1
os: darwin x64
@angular/common: 2.4.1
@angular/compiler: 2.4.1
@angular/core: 2.4.1
@angular/forms: 2.4.1
@angular/http: 2.4.1
@angular/platform-browser: 2.4.1
@angular/platform-browser-dynamic: 2.4.1
@angular/router: 3.4.1
@angular/compiler-cli: 2.4.1
更新
好的,所以我弄清楚我做错了什么,我误读了Plunkr的例子,它已经把组件放在一个数组中,是否可以根据字符串解析组件?像这样:Plunkr
让它像这样工作,但想知道是否有更整洁的解决方案:
var artwork = null;
switch(this.type) {
case 'Test1Component':
artwork = Test1Component;
break;
case 'Test2Component':
artwork = Test2Component;
break;
}
if(artwork) {
let factory = this.componentFactoryResolver.resolveComponentFactory(artwork);
this.cmpRef = this.target.createComponent(factory)
}