我正在尝试使用服务来处理http请求:

angular
    .module('app')
    .factory('stats', function($http){
            return {
                getStats: function(path) {
                    return $http
                       .get(path)
                       .then(function(result) {
                            //resolve the promise as the data
                            return result.data;
                        });
                }
            };
    });


但是,当在控制器中调用getStats方法时,$ routeParams属性是未定义的,因此该请求永远不会运行:

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);


当我直接在控制器中直接运行http请求而不使用服务时,这不是我遇到的问题。

最佳答案

正如您所说的,没有服务就没有问题,这意味着问题不在于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服务或回调函数。

关于javascript - 为什么$ routeParams未定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31510983/

10-11 11:23