相关疑难解决方法(0)

使用Angular CLI和Angular 5在运行时动态加载新模块

目前我正在开发一个托管在客户端服务器上的项目.对于新的"模块",无意重新编译整个应用程序.也就是说,客户端希望在运行时更新路由器/延​​迟加载的模块.我已经尝试了几件事,但我无法让它发挥作用.我想知道你们中是否有人知道我还能尝试什么或者我错过了什么.

有一点我注意到,在构建应用程序时,我尝试使用angular cli的大部分资源都被webpack捆绑成单独的块.这似乎是合乎逻辑的,因为它使用了webpack代码拆分.但是如果在编译时模块还不知道怎么办(但是编译后的模块存储在服务器的某个地方)?捆绑不起作用,因为它找不到要导入的模块.并且使用SystemJS将在系统上找到时加载UMD模块,但也通过webpack捆绑在一个单独的块中.

我已经尝试过的一些资源;

我已经尝试并实现了一些代码,但目前还没有工作;

使用普通的module.ts文件扩展路由器

     this.router.config.push({
    path: "external",
    loadChildren: () =>
      System.import("./module/external.module").then(
        module => module["ExternalModule"],
        () => {
          throw { loadChunkError: true };
        }
      )
  });
Run Code Online (Sandbox Code Playgroud)

正常SystemJS导入UMD捆绑包

System.import("./external/bundles/external.umd.js").then(modules => {
  console.log(modules);
  this.compiler.compileModuleAndAllComponentsAsync(modules['External']).then(compiled => {
    const m = compiled.ngModuleFactory.create(this.injector);
    const factory = compiled.componentFactories[0];
    const cmp = factory.create(this.injector, [], null, m);

    });
});
Run Code Online (Sandbox Code Playgroud)

导入外部模块,不使用webpack(afaik)

const url = 'https://gist.githubusercontent.com/dianadujing/a7bbbf191349182e1d459286dba0282f/raw/c23281f8c5fabb10ab9d144489316919e4233d11/app.module.ts';
const importer = (url:any) => Observable.fromPromise(System.import(url));
console.log('importer:', …
Run Code Online (Sandbox Code Playgroud)

javascript webpack angular-cli angular angular5

40
推荐指数
2
解决办法
3万
查看次数

如何将动态外部组件加载到Angular应用程序中

我遇到了Angular应用程序的问题.

我想用(aot)的Typscript构建一个角度应用程序.

目的是显示带有一些小部件的用户仪表板.小部件是角度组件.

我的应用程序附带了一些嵌入式小部件.但小部件应该通过像市场这样的东西来扩展; 或手动创建.

市场应该将文件(js/ts/bunlde .. ??)下载到特定的文件夹中.

然后我的应用程序应该能够加载新的小部件(= ng组件)并实例化它们.

我的文件夹结构(制作)

  |- index.html
  |- main.f5b448e73f5a1f3f796e.bundle.js
  |- main.f5b448e73f5a1f3f796e.bundle.js.map
  |- .... (all other files generated)
  |- externalWidgets
      |- widgetA
            |- widjetA.js
            |- widjetA.js.map
            |- assets
                 |- image.png
      |- widgetB
            |- widjetB.ts
            |- widjetB.html
            |- widjetB.css
Run Code Online (Sandbox Code Playgroud)

然后在加载用户页面时,数据库说有一个widgetA.因此,目标是动态加载文件和instanciate包含的组件.

我尝试过很多解决方案,使用"require"和"System.import",但是当动态生成加载路径时,两者都失败了.

这应该是可能的吗?我可以改变我的代码结构; 更改外部小部件..(例如,widgetB尚未转换,...​​)

事实上,我正在寻找一个带有Angular4/webpack应用程序的"插件系统".

plugins runtime typescript webpack angular

8
推荐指数
1
解决办法
1万
查看次数

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

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

  1. 主shell应用程序托管在:http://plugin_shell.mydomain.com
  2. 一个模块(带有一堆组件,服务等):已编译的代码托管在另一个URL上.让我们说: http://plugins/modules/myfirstplugin.umd.js
  3. 当shell加载时.加载所有模块,呈现特定组件,引用服务,使用类等.

我尝试使用SystemJsNgModuleLoader.load加载模块,但它确实似乎适用于这种用例.

谢谢

编辑:同样的问题(没有答案):如何动态加载外部角度2模块(如从外部module.bundle.js提供)

dynamic angular

8
推荐指数
1
解决办法
5987
查看次数