2013-09-02 6 views
11

AngularJSプロジェクトには、プロジェクト全体のいくつかの設定値をサーバーからajaxリクエストでフェッチする単一のconfigServiceがあります。つまり、ユーザーをモデレートする必要があるかどうかアカウントが有効になる前にサービスのajaxが終了するまでページ全体の負荷をAngularJSに遅らせる

設定に従って情報を表示するには、最初のページ全体の読み込みを、この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; 
}); 

サービスはシングルトンであることから、これだけでなく、すべてのルート変更に、1時間ページのロード時に実行されます。

今、私は$qの使用方法を知っていますが、私の問題は、このサービスが要求を完了するまで、すべての角度の実行を延期できますか?ほとんどの私の意見はconfigService.serverConfigの値を必要とし、特定の動作のためにそれに依存しています - これを非同期で行い、すべてのコントローラにdefered.then()を持っているのがベストアイデアのようには見えません。

+0

ソリューションを見つけましたか? –

+1

いいえ、回避策(ページの読み込み時に利用できるように設定オプションに依存していない)のみです。 Upvoteはチャンスを増やすかもしれない:) – Dyna

答えて

1

最初のすべてのajaxリクエストが完了したら、rootScope 'ajaxComplete'イベントを発行する角度モジュールを作成しました。

これは、新しい要求が送信されたときにタイマーをリセットし、保留中の要求の数を追跡する角度インターセプターを使用します。次に、すべての応答が返され、500ミリ秒間新しい要求が送信されないと、初期のajax要求が完了したとみなします。 gitプロジェクトには例があります。

ハッピーコーディング。

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

関連する問題