angularJS服务的返回对象奇怪地形成

时间:2015-09-28 15:51:33

标签: angularjs angularjs-directive angular-promise

我在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设置为我的对象数据而不是承诺?

1 个答案:

答案 0 :(得分: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;
});