У меня есть служба в Angular:
/* App Module */
var triviaApp = angular.module('triviaApp', ['ngRoute', 'ngResource', 'ngCookies','ngAnimate', 'ui.bootstrap']);
triviaApp.service('GameService', ['$rootScope', '$log', '$http', '$resource', '$location', function($rootScope, $log, $http, $resource, $location) {
this.newGame = function(playerId, aiLevel, opponentId) {
console.log('newGame - init');
return $http({
url: triviaAppConfig.rootAPIUrl + 'Players/' + playerId + '/Games?aiLevel=' + aiLevel + '&OpponentId=' + opponentId,
method: "POST",
})
.then(function(response) {
return response.data;
}, function(response) {
$log.warn('Error in $http - getGames in controller...');
});
}
}]);
Здесь мой контроллер, который вызывает мой сервис и прикрепляет его к директиве newGameBtn....
// HOME CONTROLLER
triviaApp.controller('HomeController', ['$rootScope', '$scope', '$http', '$cookies', 'GameService', '$log',
function($rootScope, $scope, $http, $cookies, GameService, $log ) {
// Initiate New Game Function
$scope.newGameBtn = function(emailId, aiLevel, opponentId) {
$scope.gameObj = GameService.newGame(emailId, aiLevel, opponentId);
console.log($scope.gameObj);
}
]);
</script>
<div class="col-md-6 new-game-button">
<a href="" ng-click="newGameBtn(emailId, 'none', 0)">
<img src="/img/home/player-vs-player.png" width="256" height="161" alt="Player Vs Player">
<p>New auto-matched Game</p>
</a>
</div>
Проблема, с которой я столкнулась, заключается в том, что $ scope.gameObj возвращается как:
d {$$state: Object}
$$state: Object
status: 1
value: Object
ActivePlayer: 40
ConsecutiveAnswerCount: 0
ConsecutiveAwardsCount: 0
EndTime: "0001-01-01T00:00:00"
GameId: 1168
GameRound: 0
IsAwardRound: false
IsEndOfTurnRound: false
IsGameOverRound: false
Player1: Object
Player1AnswerSeconds: 0
Player1Awards: Array[0]
Player1Score: 0
Player2: Object
Player2AnswerSeconds: 0
Player2Awards: Array[0]
Player2Score: 0
StartTime: "2015-09-28T15:45:09.5246982Z"
Status: "InProgress"
WinningPlayer: 0
__proto__: Object
__proto__: Object
__proto__: d
Теперь из чтения вокруг это звучит так, будто я получаю обещание назад, а не объект, но вопрос у меня есть, как я могу переписать службу и контроллер, чтобы установить $ scope.gameObj как мои данные объекта, а не обещание?
Заставьте сервис вернуть обещание:
this.newGame = function(playerId, aiLevel, opponentId) {
return $http({
url: triviaAppConfig.rootAPIUrl + 'Players/' + playerId + '/Games?aiLevel=' + aiLevel + '&OpponentId=' + opponentId,
method: "POST",
});
}
И заставьте ваш контроллер ждать его разрешения:
GameService.newGame(emailId, aiLevel, opponentId).then(function(response) {
$scope.gameObj = response.data;
});