从另一个url-angular4加载动态模块

时间:2017-08-08 14:37:52

标签: angular dynamic

是否可以引用一个模块(已经以umd或es格式编译)并在已编译的角度应用程序中动态加载它?

  1. 主要应用程序托管在http://plugin_shell.mydomain.com
  2. 一个模块(带有一堆组件,服务等):编译代码 托管在另一个网址。让我们说: http://plugins/modules/myfirstplugin.umd.js
  3. 当shell加载时。加载所有模块,渲染特定组件,参考 服务,使用类等。
  4. 我尝试使用SystemJsNgModuleLoader.load加载模块,但它似乎确实适用于这种用例。

    由于

    编辑:同样的问题(没有答案):How to dynamically load external angular 2 module (like served from an external module.bundle.js)

1 个答案:

答案 0 :(得分:2)

你可以这样做:

@Component({
  providers: [
    {
      provide: NgModuleFactoryLoader,
      useClass: SystemJsNgModuleLoader
    }
  ]
})
export class ModuleLoaderComponent {
  constructor(private _injector: Injector,
              private loader: NgModuleFactoryLoader) {
  }

  ngAfterViewInit() {
    this.loader.load('app/t.module#TModule').then((factory) => {
      const module = factory.create(this._injector);
      const r = module.componentFactoryResolver;
      const cmpFactory = r.resolveComponentFactory(AComponent);

      // create a component and attach it to the view
      const componentRef = cmpFactory.create(this._injector);
      this.container.insert(componentRef.hostView);
    })
  }
}

阅读Here is what you need to know about dynamic components in Angular了解更多详情。具体为Dynamic module loading and compilation部分。