我试图通过控制器将ui-router的$ stateParams传递给$ httpd工厂服务。但我对如何实现同样目标毫无头绪。 $ http factory service负责根据cid参数获取动态数据。如何将此路由参数传递给工厂服务中的后端脚本。
这是我的代码段。
.state('category',{url:'/category/:cid',templateUrl:'views/category.html',controller:'CategoryCtrl'})
myapp.factory('catService', function($http) {
return {
getCategory: function(callback) {
$http.post('categorydetail.php').success(callback);
}
}
});
myapp.controller('CategoryCtrl', function($scope, catService) {
catService.getCategory(function(data,status) {
$scope.result = data;
});
});
非常感谢您的帮助。谢谢。
答案 0 :(得分:4)
.state('category', {
url:'/category/:cid',
templateUrl:'views/category.html',
controller:'CategoryCtrl'
}
)
myapp.factory('catService', function($http) {
return {
getCategory: function(cid, callback) {
$http.post('categorydetail.php?cid=' + cid).success(callback);
}
}
});
myapp.controller('CategoryCtrl', function($scope, $stateParams, catService) {
catService.getCategory($stateParams.cid, function(data,status) {
$scope.result = data;
});
});
答案 1 :(得分:0)
据我了解,您需要在状态准备好之前访问$stateParams
。在状态更改完成之前,您无法使用$stateParams
对象访问要更改的状态的参数。更改状态时会发生几个事件,首先是$stateChangeStart
,其中您会收到有关更改状态的通知,并且可以获取这两个状态中的所有params
,因此您可以使用$stateChangeStart
事件来访问params
并将它们放在某处,以便您在需要时可以访问它们。
myapp.run(['$rootScope', function($rootScope) {
$rootScope.$on('$stateChangeStart', function (event, newState, newParams, oldState, oldParams) {
$rootScope.newParams = newParams;
});
}]);
myapp.factory('catService', function($http, $rootScope) {
return {
getCategory: function(callback) {
$http.post('categorydetail.php?cid=' + $rootScope.newParams.cid).success(callback);
}
}
});