Возвращенный объект из сервиса angularJS сформирован странным образом

0

У меня есть служба в 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 как мои данные объекта, а не обещание?

  • 0
    Это точно похоже на ваши игровые данные ... У обещания нет таких свойств, как "Player1Score" и так далее.
  • 0
    Это мои данные, но они похоронены на 3 уровня в глубине объекта значения d> $$ state> вместо корневого объекта.
Теги:
angularjs-directive
angular-promise

1 ответ

1
Лучший ответ

Заставьте сервис вернуть обещание:

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;
});
  • 0
    Это работает, но, удалив разрешение .hen из службы в контроллер, я удалил возможность использовать эту службу для доставки этого объекта в другие контроллеры. Почему .hen не работает для доставки объекта, когда он находится в сервисе, но работает в контроллере?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню