我的应用程序正在关注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示例。
答案 0 :(得分:1)
作为最佳实践,您应该尽早配置服务,这通常是您的主要模块(应用程序根目录),最好只配置一次以避免重叠更改。
由于$http
是一个单例(如您所述),因此每次注入$http
时,通过配置进行的任何更改都将在整个应用程序中传播。
还值得一提的是,对服务的配置是先进先出,这意味着如果您有两个配置更改,最后访问的配置将是持久保存到服务的配置,因为如果它们先前的配置将被覆盖正在改变服务的相同组成部分。
在您的情况下,是的,您模块中对$http
的更改将使用$http
扩展到您的主应用程序和任何其他模块。
最后,根据评论,儿童依赖配置在父母配置之前解决,正如这个简单的小提琴所示:
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。