我正在尝试使用服务来处理http请求:
app.controller('ChartController', ['$route', 'stats', '$scope', '$rootScope', '$routeParams', function($route, stats, $scope, $rootScope, $routeParams) {
console.log($routeParams);
var path = "/players/players/" + $routeParams.playerId;
var players = stats.getStats(path);
但是在控制器中调用getStats方法时,$ routeParams属性是未定义的,因此请求永远不会运行:
<tr ng-repeat="row in categories">
<td>{{row.category}}</td>
</tr>
当我在控制器中直接运行http请求而不使用服务时,这不是我遇到的问题。
答案 0 :(得分:1)
正如你所说没有服务没有问题,这意味着问题不在于routeParams,而在于你处理服务的方式。问题是AJAX调用的异步行为。在收到回复之前返回响应。有很多方法可以解决这个问题。我将解释一种可能的方式。
将您的工厂更新为
angular.module('app')
.factory('stats', function($http){
return{
getStats: function(path) {
return $http.get(path);
}
};
});
将控制器更新为
var players;
stats.getStats(path).then(function(response){
players = response.data;
});
其他可能的选项可以使用$q
服务或使用回调函数。