在AngularJS中跨多个模块配置共享服务

时间:2015-09-01 15:55:23

标签: angularjs config

我的应用程序正在关注John Papa的styleguide以获取AngularJS应用程序:

风格指南强调使用强模块化方法来设计应用程序。我的问题是关于多种配置及其对共享服务的影响。

假设我有一个这样的主模块:

angular.module("app", ["app.feature1"])
  .config(function() {
    // do some configuration here
    console.log("app configured");
  });

配置共享角度服务的功能模块,比方说$ http服务:

angular.module("app.feature1", [])
  .config(function($http) {
  // configure the $http service
  console.log("feature1 configured");
}); 

我的理解是否正确,“feature1”的配置将转移到主模块,因为$ http服务是单例,因此跨模块共享?或者我是否必须在主模块中配置$ http服务,因为每个模块都有自己的$ http服务实例?

编辑:我可以确认依赖配置已被转移并首先执行。请参阅David的jsfiddle示例。

1 个答案:

答案 0 :(得分:1)

作为最佳实践,您应该尽早配置服务,这通常是您的主要模块(应用程序根目录),最好只配置一次以避免重叠更改。

由于$http是一个单例(如您所述),因此每次注入$http时,通过配置进行的任何更改都将在整个应用程序中传播。

还值得一提的是,对服务的配置是先进先出,这意味着如果您有两个配置更改,最后访问的配置将是持久保存到服务的配置,因为如果它们先前的配置将被覆盖正在改变服务的相同组成部分。

在您的情况下,是的,您模块中对$http的更改将使用$http扩展到您的主应用程序和任何其他模块。

最后,根据评论,儿童依赖配置在父母配置之前解决,正如这个简单的小提琴所示:

http://jsfiddle.net/maqzo6fv/

HTML:

<div ng-app="app"></div>

JS:

angular.module("app", ["app.feature1"])
    .config(function() {
        alert('main config');
});

angular.module("app.feature1", [])
    .config(function() {
        alert('child config');
}); 

子配置将在每次加载时在main之前调用alert。