2017-10-18 17 views
1

ローカリゼーションCookieを使用して現在のカルチャを追跡しています。アプリケーションが起動するときに現在選択されているカルチャのすべてのメッセージを読み込み、そのカルチャに関する情報と共にlocalStorageに保存し、選択したカルチャが変更されたときにのみ更新します(localStorageの値が'CurrentCulture'の場合)クッキー内に)。 AngularJsでデータをロードできるように異なる実行がいつ終了するのかをどのようにして判断できますか?

は私のコントローラでは、私が最初のロードに私は何もメッセージを持っていないので、私は、 getLocalisationsFromServer終了する前に

app.service("localisationService", function ($q, $http, localStorageService) { 

     var getCachedMessagesForLanguage = function (localisationMessagesUrl, language) { 
      console.log('getCachedMessagesForLanguage'); 
      var messages = localStorageService.get('Localisation'); 
      if (!messages || language !== localStorageService.get('Language')) { 

       getLocalisationsFromServer(localisationMessagesUrl).then(function (serverMessages) { 
        localStorageService.add('Localisation', messages); 
        localStorageService.add('Language', language); 

       }); 
      } 
      return localStorageService.get('Localisation') 

     } 

     function getLocalisationsFromServer(localisationMessagesUrl) {    
      return $q(function (resolve) { 
       $http.get(localisationMessagesUrl) 
        .then(function (response) { 
         resolve(response.data); 
        }); 
      }); 
     }   

     return {     
      messages: function (localisationMessagesUrl, language) { 
       return getCachedMessagesForLanguage(localisationMessagesUrl, language); 
      } 
     }; 

    }); 

getCachedMessagesForLanguage戻りundefinedを持って、localisationService $scope.messages = localisationService.messages(localisationMessagesUrl, currentCulture);

を設定します。ページをリフレッシュすると正しく表示されます。これをどうすれば解決できますか?

答えて

1

makeが..あなたは、その後、行うことができますdeferred.promise

を返すgetCachedMessagesForLanguage

getCachedMessagesForLanguage(localisationMessagesUrl, 
language).then(function(Localisation) { 
    return getLocalisationsFromServer(localisationMessagesUrl) 
}).then(function(responseFromGetLocalisationsFromServer) { 
    // do your thing here 
}) 
関連する問題