12

我的 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()在每个控制器中都有一个似乎不是最好的主意。

4

2 回答 2

3
<html ng-app="yourApp">

angular.element(document).ready(function() {
  angular.bootstrap(document, ["yourApp"]);
});

也许手动引导应用程序可以帮助...?

如果不是这种情况,请查看此帖子! 延迟 AngularJS 路由更改直到模型加载以防止闪烁

于 2013-09-02T13:56:02.133 回答
1

我编写了一个 Angular 模块,一旦所有初始 ajax 请求完成,它就会发出一个 rootScope 'ajaxComplete' 事件。

它使用角度拦截器在发送新请求时重置计时器,并跟踪待处理请求的数量。然后,一旦所有响应都返回并且在 500 毫秒内没有发送新请求,则认为初始 ajax 请求已完成。git项目中有一个例子。

快乐编码。

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

于 2014-01-28T18:27:00.880 回答