配置AngularJS模块-它如何影响应用程序中的其他模块?
我有两个角度模块,配置AngularJS模块-它如何影响应用程序中的其他模块?,angularjs,angularjs-module,Angularjs,Angularjs Module,我有两个角度模块,A和B。 A没有DEP、一些配置和一些筛选器: angular.module('A', []) .config(function ($httpProvider) { // set common headers for $http requests $httpProvider.defaults.headers.common = {...}; }) .filter('myFilter', function () { /
A
和B
。
A
没有DEP、一些配置和一些筛选器:
angular.module('A', [])
.config(function ($httpProvider) {
// set common headers for $http requests
$httpProvider.defaults.headers.common = {...};
})
.filter('myFilter', function () {
// create a filter
});
B
依赖于A
,因此它的变化类似于:
angular.module('B', ['A'])...
我知道B
取决于A
意味着我可以在B
视图中使用myFilter
问题是:myFilter
中的代码是否受益于我在A
模块的config()
函数中设置的$http
公共头(因为myFilter
属于A
)
当从B
模块内部发出HTTP请求时,公共头是我在A
内部设置的头,还是它们不受A
内部配置的影响
这两个问题对我来说都很有意义:我在
A
模块中配置了一些公共标题,我将在A
模块提供的过滤器中使用这些标题,但当我在B
模块中时,我希望这些公共标题不会妨碍我;不过,当我在B
视图中时,我希望能够使用A
过滤器及其特定的公共标题。以下是我的想法。与任何其他应用程序一样,$httpProvider在本质上也是单例的,这意味着对它的任何更改(包括任何模块)都会影响其他应用程序,或者换句话说,更改是全局性的。在任何一个应用程序中,无论您使用什么模块,所有的服务
,工厂
和提供商
都是单身人士
您正在使用
$httpProvider
,一个这样的单例。。。因此,就单例的本质而言,对提供者所做的任何配置都意味着所有模块都会受到影响。参见示例
angular.module("foo",[]).config(function($httpProvider){$httpProvider.test = 123});
angular.module("bar",["foo"])
.config(function($httpProvider){console.log(httpProvider.test)}); //123
我认为Chandermani是正确的,若您只想为模块A添加头,那个么可能在.value/factory提供程序中有一个公共头的集合,它返回一个$http,修改这些头。因此,如果我必须做相反的事情,那就是为我的整个应用程序配置一些公共标题,也许最干净的方法是创建一个
configurator
模块来执行整个应用程序共享的配置。@leon是的,这将解决问题。尽管如此,我认为它的工作方式仍然很漂亮,因为我可以有一个模块,它有自己的模块功能,有他自己的对象配置,比如$httpProvider
,在我看来,这将使它具有更高的可重用性。是的,看起来是这样的,但我想不出有多少情况下,每个模块都需要一个单独的$http对象。单个模块负责所有http请求是很常见的,这似乎是一种边缘情况。