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

Configuring shared services across multiple modules in AngularJS

我的应用程序在 AngularJS 应用程序中遵循 John Papa 的 styleguide

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

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

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

以及配置共享 angular 服务的功能模块,假设 $http 服务:

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

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

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

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

由于 $http 是单例(正如您提到的),每次注入 $http.

时,通过配置进行的任何更改都将传播到整个应用程序

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

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

最后,根据评论,子依赖配置在父配置之前解析,如这个简单的 fiddle 所示:

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');
}); 

每次加载时,子配置都会在主配置之前调用警报。