2015-09-28 45 views
0

我有角服务:返回的对象奇怪形成

/* 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) { 
 
    
 
    \t this.newGame = function(playerId, aiLevel, opponentId) { 
 
\t \t console.log('newGame - init'); 
 
\t \t 
 
\t \t return $http({ 
 
\t \t \t url: triviaAppConfig.rootAPIUrl + 'Players/' + playerId + '/Games?aiLevel=' + aiLevel + '&OpponentId=' + opponentId, 
 
\t \t \t method: "POST", 
 
\t \t \t }) 
 
\t \t \t .then(function(response) { \t \t \t \t 
 
\t \t \t \t return response.data; 
 
\t \t \t }, function(response) { 
 
\t \t \t \t $log.warn('Error in $http - getGames in controller...'); 
 
\t \t }); 
 
\t 
 
\t } 
 
    
 
    }]);

这里是我的控制器调用我的服务,并将其附加到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

这是我的数据,但它被埋在d> $$ state> value对象的3层深处,而不是根对象。 – TWLATL

回答

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

这可以起作用,但是通过从服务中删除.then的解析到控制器,我已经删除了使用该服务将该对象传送到其他控制器的功能。为什么当它在服务中时不能传递对象,而是在控制器中工作? – TWLATL