0

アプリケーションの開始時にgloble変数 "$ rootScope.SegmentSelectedGlobal"を初期化したいとします。 このグロブル変数は、サービスからデータを取得します。 私がコントローラを介してサービスを実行している場合、正常に動作しています。 しかし、私がApp.runから実行すると、値は報告されていません。AngularJS:app.runでのサービスの注入

App.run:

app.run(['$rootScope','DashboardService', function($rootScope,DashboardService) { 
        $rootScope.SegmentSelectedGlobal = DashboardService.getSegments(); 
       }]); 

サービス:

app.service("DashboardService",function($q,$http,errorMessages){ 
     var allSegements = []; 
     return { 
       // For selected Only 
       getSegments : getSegments 
      } 
     function getSegments(){ 
       var deferred = $q.defer(); 
       $http({ 
        url: "/getAllSegments", 
        method: "GET" 
       }).success(function (data, status, headers, config) { 
        deferred.resolve(data); 
        allSegements = data; 
       }).error(function (data, status, headers, config) { 
        //logger.logError('Error while retrieving Versions details'); 
        allSegements = null; 
       }); 
       return allSegements; 
      } 
    }); 

ありがとうあなたの助けのためにここで

はコードがあります。

答えて

0

return allSegementsにあるallSegementsが未定義のため、undefinedを返します。

はあなたが約束を使用して、まだあなたは、あなたがあなたのページをロードする前に解決することを約束し、両方のngRouteで利用可能 resolve属性を(使うのを待つしたい場合は、適切

app.service("DashboardService",function($q,$http,errorMessages){ 
     var allSegements = []; 
     return { 
       // For selected Only 
       getSegments : getSegments 
      } 
     function getSegments(){ 
       var deferred = $q.defer(); 
       $http({ 
        url: "/getAllSegments", 
        method: "GET" 
       }).success(function (data, status, headers, config) { 
        deferred.resolve(data); 
        allSegements = data; 
       }).error(function (data, status, headers, config) { 
        //logger.logError('Error while retrieving Versions details'); 
        deferred.reject();//--------- REJECT IF ERROR 
       }); 
       return deferred.promise;//------- RETURN THE PROMISE 
      } 
    }); 

    app.run(['$rootScope','DashboardService',function($rootScope,DashboardService) { 
    // use then to get the data from your promise ince it's ready 
    DashboardService.getSegments().then(function(data){ 
      $rootScope.SegmentSelectedGlobal = data;  
    }); 
}]); 

注意をそれを返すのを忘れて/ ui-router):

resolve:{ 
    segments:['DashboardService', function(DashboardService){ 
      return DashboardService.getSegments();//we return the promise, the resolve parameter will take the result, in case of error page won't be loaded. 
    }]; 
} 
+0

ありがとう@Walfrat。今は働いて.. !! – Bond

関連する問題