2013-09-25 84 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; }); 
 
     }] 
 
    } 
 
})