如何在另一个模块中动态注入模块?

时间:2015-11-02 06:53:46

标签: javascript angularjs

我的角度应用程序如下所示 App.js

 angular.module('myapp', [
    'ngSanitize',
    'ngMessages',
    authModule,
    loginModule
]);

//prodductModule

在我的登录模块中,我使用$ http进行ajax调用。收到服务器的正确响应后,我想初始化另一个模块,假设" productModule"。

怎么做?有角度可能吗?

4 个答案:

答案 0 :(得分:1)

你可以这样做:

var myApp = angular.module('myapp', [
    'ngSanitize',
    'ngMessages'
]);

现在,稍后在您的AJAX调用代码中,您可以这样写:

myApp.requires.push('productModule');

查看Inject modules conditionally in AngularJS app

答案 1 :(得分:0)

简短回答 - 不,默认情况下不支持。

长答案 - 轻微 - 使用第三方库,例如:https://oclazyload.readme.io/

但我的意见是你不应该这样做,Angular是专为应用程序设计的,所以只需在启动之前加载整个应用程序。即使是大型应用也会快速启动。动态加载模块会导致不必要的滞后,并且在不需要时不会卸载模块。

但是最后的决定是你的,因为它是真的:)

修改 如果您在用户登录时尝试加载其他模块。我们通常会像在querystring中使用身份验证令牌重定向到生产应用程序一样,所以服务器让我们用app下载javascript。但这并非每次都是必要的,因此我们加载整个应用程序。

答案 2 :(得分:0)

您无法动态加载模块。 Angular需要在引导过程中知道所有模块名称。

要解决此问题,您可以创建空模块并将其名称传递给您的应用。 然后通过 RequireJS 加载模块JS文件并逐个注册每个服务或控制器。

答案 3 :(得分:0)

动态加载模块,我建议使用require js。