首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Angular模块创建后添加依赖关系

在Angular模块创建后添加依赖关系
EN

Stack Overflow用户
提问于 2014-11-18 15:40:50
回答 3查看 12.7K关注 0票数 26

你们知道在创建模块依赖后是否可以添加它吗?大概是这样的:

代码语言:javascript
复制
// 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
// ???

编辑:我知道这似乎是一个奇怪的问题。我在一个基于组件的应用程序组织上工作,也想看看一个子组件是否可以在不定义自己的模块的情况下添加依赖到它的父组件模块。大概是这样的:

代码语言:javascript
复制
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目录中,所以如果我后来决定从应用程序中删除subcomponentA,我不需要记住从componentA模块中删除它的依赖项。我希望所有与subcomponentA相关的内容都分组到subcomponentA目录中。不过,我的构建脚本将确保在处理subcomponetA之前处理componentA代码。

感谢每一个尝试过这一点的人。

EN

回答 3

Stack Overflow用户

发布于 2016-05-16 07:23:21

为此,我使用以下方法,并且对我来说工作得很好。

代码语言:javascript
复制
var app = angular.module("myApp", []);

angular.module("myApp").requires.push('ngResource');
票数 39
EN

Stack Overflow用户

发布于 2014-11-18 15:52:31

我认为这是不可能的。然而,我希望被证明是错的。

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

编辑:事实上……我从来没有尝试过,但实际上这可能比我最初想象的要简单得多。我们可以尝试以下操作:

文件A:

代码语言:javascript
复制
window.myApp_dependencies = []; // Add dependencies to the global scope.

angular.module('myApp', dependencies);

文件B:

代码语言:javascript
复制
var mod = angular.module("myApp");

window.myApp_dependencies.push('ngRoute');

这并不是很理想,因为您必须在全局范围内创建一个变量。不过,使用模块也可以做到这一点。请注意,在这种情况下,依赖关系只有在应用程序实际启动之前才是可变的-因此,您可以在文件之间拆分依赖关系,但不能在运行时更改它们。

我不知道这有没有用。不过,我明天会试一试。

票数 0
EN

Stack Overflow用户

发布于 2014-11-18 17:00:49

这是一个奇怪的问题,但是你想要实现的仍然是在angularjs/SPA/依赖注入的前景中有一些错误

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

但是,如果您重新初始化了与已声明模块不同的模块,那么这样做将为您的应用程序创建两个不同的作用域,因为使用相同的模块名称

说:文件A

代码语言:javascript
复制
angular.module("myApp", []);

这是在文件B中定义的

代码语言:javascript
复制
mod = angular.module("myApp", ['ngResource']);

因此,这将导致在一个应用程序中有两个同名不同应用程序,以及在不同的文件中有两个同名的应用程序,因此在应用程序中有两个不同的angular模块。

第二种选择:让应用程序中有相同的模块,并在一个点上注入,在任何控制器中,你想要使用这个注入作为该控制器中的参数。

希望这对你有所帮助!

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26988989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档