我正在尝试使用服务来处理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/