延迟AngularJS中的整个页面加载,直到服务的ajax完成

时间:2013-09-02 12:47:30

标签: javascript ajax angularjs deferred pageload

我的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()似乎不是最好的主意。

2 个答案:

答案 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项目中有一个例子。

快乐的编码。

https://github.com/jcarras/angular-ajax-complete