AngularJS - как передать переменную области видимости в сервис?

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

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

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 сервису без возврата неопределенного?

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

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

Другие вопросы по тегам