我一直在寻找开发一种方法,用于将模块和/或组件加载到AOT编译的Angular 4应用程序中,并且被各种解决方案所阻碍,这些解决方案似乎从未让我想到的地方。
我的要求是这样的:
我已经使用像SystemJsNgModuleLoader这样的工具进行了探索 - 这似乎要求我提供Angular编译器,如果AOT以某种方式允许我包含它,我很高兴,即使我是不在其他地方使用它。我还研究过使用ngc直接编译我的动态模块并加载生成的ngfactory和编译的组件/模块,但是我不清楚这是否完全可行或者如果是这样 - Angular提供哪些工具这样做。我也看到了对ANALYZE_FOR_ENTRY_COMPONENTS的引用 - 但是不能清楚地了解它的局限性,因为首先分析表明它不是我想要的。
我曾经假设我可能能够定义一个公共接口,然后简单地发出一个get请求将我的动态组件带入我的应用程序 - 但Angular似乎对我试图做的任何事情都没有过敏而且完全没有步骤。试图直接将非角度代码附加到DOM。
我尝试做的甚至可能吗? Angular 2+是否只是鄙视其内部应用程序架构的这种即时修改?
答案 0 :(得分:1)
我想我找到了一篇文章,准确描述了你要做的事情。简而言之,您需要接管引导生命周期。
魔法在这里的片段中。
import {AComponentNgFactory, BComponentNgFactory} from './components.ngfactory.ts';
@NgModule({
imports: [BrowserModule],
declarations: [AComponent, BComponent]
})
export class AppModule {
ngDoBootstrap(app) {
fetch('url/to/fetch/component/name')
.then((name)=>{ this.bootstrapRootComponent(app, name)});
}
bootstrapRootComponent(app, name) {
const options = {
'a-comp': AComponentNgFactory,
'b-comp': BComponentNgFactory
};
https://blog.angularindepth.com/how-to-manually-bootstrap-an-angular-application-9a36ccf86429