Подтвердить что ты не робот

Разрешение ui-router с динамическими параметрами

Это, наверное, просто, но я ничего не могу найти в документах, а googling не помог. Я пытаюсь определить состояние в $stateProvider, где URL-адрес, который мне нужно направить на сервер, чтобы вытащить нужные данные, зависит от параметра URL-адреса состояния. Короче говоря, что-то вроде:

 .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, без везения. Какой правильный способ сделать это?

4b9b3361

Ответ 1

Вы были рядом с $routeParams. Если вы используете ui-router, используйте $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; });
         }]
     }
})

Ответ 2

Для тех, кто использует ui-router 1.0 $stateParams устарел, вы должны использовать $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; });
         }]
     }
})