0

Я хочу инициализировать переменную globle «$ rootScope.SegmentSelectedGlobal» только при запуске приложения. Эта переменная globle получает данные от службы. Если я выполняю сервис через контроллер, его рабочий режим. Но когда я выполняю его из App.run, никакое значение не оспаривается, а d не сообщается об ошибке.AngularJS: Injecting Service in 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; 
      } 
    }); 

Thanx за вашу помощь.

ответ

0

Он возвращает undefined, потому что на return allSegementsallSegements не определено.

Вы используете обещание, пока ваш забыл вернуть его правильно

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;  
    }); 
}]); 

Примечание, если вы хотите ждать обещанного быть решены перед загрузкой страницы, используйте атрибут resolve (доступен в обоих ngRoute/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

thanks @Walfrat. Теперь его работа .. !! – Bond

Смежные вопросы