【问题标题】:Can I load modules on runtime? Angular 2我可以在运行时加载模块吗?角 2
【发布时间】:2017-03-15 23:33:01
【问题描述】:

所以我有带有链接的基本 Angular 应用程序。通过单击链接用户下载具有所有依赖项的 angular 2 模块(打字稿文件或编译的 js 文件,选择一个使其工作)。下载完成后,这个基本应用程序会注入模块并启动它(假设我们已经为这些下载的模块指定了入口点)。这听起来与插件系统非常相似,但仅限于网络和当前会话期间。我能以某种方式在角度 2 中实现这一点吗?谢谢

【问题讨论】:

  • 你的意思是重新发明浏览器缓存? :-D 其实我不明白你的问题。
  • @n00dl3 我的意思是以某种方式注入一个模块,当前的客户端应用程序对此一无所知。如果某些使用浏览器缓存的操作可以解决问题,我很高兴在这里介绍此解决方案
  • 好吧,我不明白...只是想你不想每次都重新加载你的模块。您的意思是根据路由异步加载模块吗?那是supported out of the box
  • @n00dl3 不,延迟加载假定我在 app.module 中的某处声明了模块并且已编译。但我想要的是:应用程序只知道独立模块文件的路径(my.module.ts、my.component.ts 等或类似的 js 文件(在服务器端编译))。然后通过点击按钮或其他东西,应用程序加载这个模块,就像 c# 中的 LoadAssembly 一样,并启动它的主要组件(比如说,out 应用程序通过名称知道这个主要组件)

标签: angular


【解决方案1】:

您可以使用 angular-router 延迟加载任何模块

{ path: 'lazy', loadChildren: 'lazy/lazy.module#LazyModule' }

【讨论】:

  • 我在这里重复一遍以说明清楚:延迟加载假定我在 app.module 中的某处声明了模块。但我想要的是:应用程序只知道独立模块文件的路径(my.module.ts、my.component.ts 等或类似的 js 文件(在服务器端编译))。然后通过点击按钮或其他东西,应用程序加载这个模块,就像 c# 中的 LoadAssembly 一样,并启动它的主要组件(比如说,out 应用程序通过名称知道这个主要组件)
  • 如果您在应用程序中声明该模块,那么它在任何意义上都不是延迟加载或动态的。如果你这样做 Typescript 将需要模块名称以及它的位置
猜你喜欢
  • 2018-08-28
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多