2013-09-25 58 views
51

这可能很简单,但我无法在文档中找到任何内容,并且Google搜索没有帮助。我试图在$stateProvider中定义一个状态,其中我需要在服务器上点击以获取所需数据的URL取决于状态URL参数。总之,像这样:使用动态参数的UI路由器解析

.state('recipes.category', { 
    url: '/:cat', 
    templateUrl: '/partials/recipes.category.html', 
    controller: 'RecipesCategoryCtrl', 
    resolve: { 
     category: function($http) { 
     return $http.get('/recipes/' + cat) 
      .then(function(data) { return data.data; }); 
     } 
    } 
    }) 

上述不起作用。我试图注入$routeParams以获得所需的cat参数,但没有运气。做这件事的正确方法是什么?

回答

102

您接近$routeParams。如果您使用UI路由器,请改为使用$stateParams。 此代码的工作对我来说:

.state('recipes.category', { 
    url: '/:cat', 
    templateUrl: '/partials/recipes.category.html', 
    controller: 'RecipesCategoryCtrl', 
    resolve: { 
     category: ['$http','$stateParams', function($http, $stateParams) { 
      return $http.get('/recipes/' + $stateParams.cat) 
        .then(function(data) { return data.data; }); 
     }] 
    } 
}) 
+0

作品对我来说,谢谢! – kliron

+0

如何在控制器RecipesCategoryCtrl中获取'category'? – dumitru

+1

只需要注入它:'RecipesCategoryCtrl = function($ scope,category){$ scope.cat = category}' – Reto

6

对于那些谁正在使用的用户界面路由器1.0 $stateParamsis deprecated,你应该使用$transition$对象,而不是:

.state('recipes.category', { 
 
    url: '/:cat', 
 
    templateUrl: '/partials/recipes.category.html', 
 
    controller: 'RecipesCategoryCtrl', 
 
    resolve: { 
 
     category: ['$http','$transition$', function($http, $transition$) { 
 
      return $http.get('/recipes/' + $transition$.params().cat) 
 
        .then(function(data) { return data.data; }); 
 
     }] 
 
    } 
 
})