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()
вашей службы аутентификации.