将ui-router $ stateParams传递给$ http工厂服务

时间:2014-03-19 06:21:36

标签: angularjs http factory angular-ui-router

我试图通过控制器将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;
  });
});

非常感谢您的帮助。谢谢。

2 个答案:

答案 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);
    }
   }
});