在创建Angular模块之后添加依赖项

时间:2014-11-18 07:40:50

标签: angularjs

您是否知道在创建模块依赖项后是否可以添加模块依赖项?这样的事情:

// init module in file A
angular.module("myApp", []);

// retrieve module in file B and add new dependencies:
mod = angular.module("myApp");
// now I want to add an 'ngResource' dependency to mod
// ???
编辑:我知道这似乎是一个奇怪的问题。我正在开发基于组件的应用程序组织,并且想要查看子组件是否可以向其父组件模块添加依赖项,而无需定义自己的模块。这样的事情:

app/
 components/
   |__componentA/ 
        |__app.js // initializes component A module
        |__subcomponentA/ 
              |__app.js // want to add subcomponentA dependencies to componentA module from here

我的替代方案是直接在componentA模块上声明所有subcomponentA依赖项,但从组织的角度来看,我更喜欢将这些依赖项保留在subcomponentA目录中,所以如果我以后决定删除来自应用程序的子组件A,我不需要记住从componentA模块中删除其依赖项。我希望将与subcomponentA有关的所有内容分组到subcomponentA目录中。我的构建脚本将确保在子组件A之前处理componentA代码。

感谢所有对此进行抨击的人。

3 个答案:

答案 0 :(得分:32)

我使用以下方法,对我来说工作正常。

var app = angular.module("myApp", []);

angular.module("myApp").requires.push('ngResource');

答案 1 :(得分:0)

我不认为这是可能的。但是,我很想被证明是错的。

根据我的经验(并根据Angular documentation)模块,只能在初始化模块时声明依赖项。值得注意的是,在引导应用程序之前,依赖关系并未完全设置。据我所知,除非有办法重新启动整个应用程序,否则无法向正在运行的应用程序添加依赖项,这可能会产生不必要的副作用。

编辑:实际上......我从来没有尝试过这个,但这实际上可能比我原先想象的要简单得多。我们可以尝试以下方法:

档案A:

window.myApp_dependencies = []; // Add dependencies to the global scope.

angular.module('myApp', dependencies);

档案B:

var mod = angular.module("myApp");

window.myApp_dependencies.push('ngRoute');

这不是很理想,因为您被迫在全局范围内创建变量。但是,可以使用模块来完成它。请注意,在这种情况下,依赖关系只有在应用程序实际启动之前才是可变的 - 因此,您可以跨文件拆分依赖关系,但是您无法在运行时更改它们。

我不知道这是否有效。不过我明天会尝试一下。

答案 2 :(得分:-2)

奇怪的问题,但你想要达到的目标是angularjs / SPA /依赖注入的前景是错误的

您的用例类似于您希望在特定模块或一个页面中使用此依赖项。这就是为什么你想把它注射到一个位置而不是另一个位置。

但是,这样做会为你的应用程序制作两个不同的范围,因为如果重新初始化那个与已经声明的另一个模块不同的模块,那么使用相同的模块名称

说:文件A

angular.module("myApp", []);

这是在文件B中定义的

mod = angular.module("myApp", ['ngResource']);

因此,这将导致在一个应用程序中具有两个具有相同名称的不同应用程序,并且在不同文件中具有相同名称的两个应用程序 所以它在应用程序中有两个不同的角度模块。

第二个选项:让我们在整个应用程序中使用相同的模块并在一个点上注入,并且在任何想要使用的控制器中将其作为该控制器中的参数注入。

希望这有帮助!