为什么$ routeParams未定义?

时间:2015-07-20 07:33:11

标签: javascript angularjs

我正在尝试使用服务来处理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请求而不使用服务时,这不是我遇到的问题。

1 个答案:

答案 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服务或使用回调函数。