1

Это мой контроллер, в котором у меня есть переменная, которую я хочу использовать в своей службе, чтобы получить доступ к некоторым данным JSON с сервера.AngularJS - как передать переменную scope в службу?

Части контроллера, где I:

1) получить ключ API от сервера (работ и регистрирует ключ в консоли):

AuthenticationService.getData() 
     .then(function(result) { 
      $scope.apiKey = result; 
      console.log($scope.apiKey); 
    }); 

2) Вы хотите, чтобы передать ключ сервис, чтобы получить доступ к данным:

DrawService.getData($scope.apiKey) 
    .then(function(result) { 
     $scope.numbers = result.data; 
     console.log($scope.numbers); 
}); 

Услуги:

app.factory('AuthenticationService', function($http) { 
     return { 
     getData: function() { 
      return $http.get('http://game.mywebsite.com/start/?token=someNumber&sessionId=someNumber') 
       .then(function(result) { 
        return result.data; 
      } 
     ); 
    } 
} 


app.factory('DrawService', function($http) { 
      return { 
       getData: function(apiKey) { 
       var key = apiKey; 
       console.log(key);  
       return $http.get('http://game.mywebsite.com/draw/?token='+apiKey) 
        .then(function(result) { 
         return result.data; 
      }); 
     } 
    } 

someNumber - это номер, который мне предоставлен, без ошибок. myWebsite.com - пример веб-сайта, откуда я хочу получить данные JSON.

Итак, как я могу передать $ scope.apiKey на службу без его возврата undefined?

ответ

2

Вы должны вызвать DrawService.getData метод, когда вы получите ответ от AuthenticationService.getData(), Это просто означает, что вы должны вызвать метод DrawService, когда у вас есть apiKey

AuthenticationService.getData() 
    .then(function(result) { 
    $scope.apiKey = result; 
    console.log($scope.apiKey); 
    DrawService.getData($scope.apiKey) 
     .then(function(result) { 
     $scope.numbers = result.data; 
     console.log($scope.numbers); 
    }); 
}); 
+0

Блестящий! Трюк! – bltzrrr

+0

@bltzrrr рад помочь вам ... спасибо :) –

1

Так быть ясно, вы можете проход $ переменные сферы для служб - проблема здесь заключается в том, что вы пытаетесь получить доступ к $ scope.apiKey до того, как APIkey будет возвращен вам из службы проверки подлинности. Чтобы убедиться, что данные были разрешены перед его использованием, просто вызовите DrawService в .then() вашего AuthenticationService.

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