我的 AngularJS 项目中有一个单一configService
的,它通过 ajax 请求从服务器获取整个项目的一些配置值,例如在激活他们的帐户之前是否需要对用户进行审核。
为了根据配置显示信息,整个第一个页面加载应该推迟到这个 ajax 请求完成。我的服务看起来像:
angular.module('clientApp').factory('configService', function ($http) {
var configService = {};
var conf = {};
Object.defineProperty(configService, 'serverConfig', {
get: function () {
return conf;
}
});
$http.get('/api/config').success(function (data) {
conf = $.extend(conf, data);
});
return configService;
});
因此,由于服务是单例的,这只会在页面加载时执行一次,而不是在每次路由更改时执行。
现在我知道如何使用$q
和承诺,但我的问题是如何推迟所有角度的执行,直到该服务完成其请求?我的大多数观点都需要来自configService.serverConfig
特定行为的值并依赖于它——异步执行此操作并defered.then()
在每个控制器中都有一个似乎不是最好的主意。