我的AngularJS项目中有一个configService
,它通过ajax请求从服务器获取整个项目的一些配置值,即在激活帐户之前是否需要对用户进行审核。 / p>
要根据配置显示信息,应延迟整个第一页加载,直到此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
和promises,但我的问题是如何推迟执行所有角度,直到此服务完成其请求?我的大多数视图都需要来自configService.serverConfig
的值,并依赖于它的特定行为 - 异步执行此操作并在每个控制器中都有defered.then()
似乎不是最好的主意。
答案 0 :(得分:3)
<html ng-app="yourApp">
angular.element(document).ready(function() {
angular.bootstrap(document, ["yourApp"]);
});
手动启动应用程序可以帮助......?
如果不是这样,那么查看这篇文章吧! Delaying AngularJS route change until model loaded to prevent flicker
答案 1 :(得分:1)
我编写了一个角度模块,一旦完成所有初始ajax请求,就会发出rootScope'ajaxComplete'事件。
它使用角度拦截器,在发送新请求时重置计时器,并跟踪待处理请求的数量。然后在所有响应返回后认为初始ajax请求已完成,并且在500毫秒内没有发送新请求。 git项目中有一个例子。
快乐的编码。