我们有一个Angular CLI项目,我们不想动态加载模块(或组件)。我们的版本:
@angular/cli: 1.0.0-rc.1
node: 6.9.4
os: win32 x64 (though target OS is Linux)
@angular/common: 2.4.10
@angular/compiler: 2.4.10
@angular/core: 2.4.10
@angular/forms: 2.4.10
@angular/http: 2.4.10
@angular/platform-browser: 2.4.10
@angular/platform-browser-dynamic: 2.4.10
@angular/router: 3.4.10
@angular/cli: 1.0.0-rc.1
@angular/compiler-cli: 2.4.10
我们有一个根AppModule,它正在加载一个组件DocuRootComponent:
@NgModule({
declarations: [
AppComponent,
DocuRootComponent],
imports: [
BrowserModule,
HttpModule
],
providers: [SystemJsNgModuleLoader],
bootstrap: [AppComponent, DocuRootComponent]
})
export class AppModule {
constructor() {}
}
在DocuRootComponent中,我们尝试动态加载我们需要的实际Module DocuModule:
@Component({
selector: 'app-docu-root',
templateUrl: './docu-root.component.html',
styleUrls: ['./docu-root.component.css']
// entryComponents: [DocuWrapperComponent]
})
export class DocuRootComponent implements OnInit {
constructor(private loader: SystemJsNgModuleLoader, private compFactoryResolver: ComponentFactoryResolver) {
console.log('DocuRootComponent.constructor')
}
ngOnInit() {
this.loader.load('../docu/docu.module#DocuModule').then((factory: NgModuleFactory<any>) => {
console.log(factory);
});
}
}
问题是,无论我们尝试什么,它都不会加载。正如您在上面的注释代码中所看到的,我们也尝试使用entryComponents。但是在现在的代码中,我们得到了错误&#34; Uncaught(承诺):错误:找不到模块&#39; ../ docu / docu.module&#39;。错误:找不到模块&#39; ../ docu / docu.module&#39;。&#34;我们也尝试过不同的路径。现在它与DocuRootComponent文件的位置相对应,我们也尝试从&#34; src / app开始......&#34;或&#34; app /...",但似乎没有任何效果。
当我取消注释entryComponents-line时,我收到错误&#34; Unhandled Promise rejection:组件DocuWrapperComponent不是任何NgModule的一部分,或者模块尚未导入到您的模块中。&#34;
DocuModule看起来像这样:
@NgModule({
imports: [
CommonModule
],
entryComponents: [DocuWrapperComponent],
declarations: [DocuWrapperComponent]
})
export class DocuModule { }
我们四处搜索网络,但每个人似乎都在使用&#34; SystemJsNgModuleLoader.load()&#34; (我认为甚至是路由器),但对我们来说似乎没有用,我们也不知道为什么。