Невозможно получить параметры состояния ui-маршрутизатора

StackOverflow https://stackoverflow.com//questions/24016210

Вопрос

Рассмотрим следующую конфигурацию ui-маршрутизатора:

$stateProvider
  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/menu.html",
    controller: 'AppCtrl'
  })
  .state('app.feed', {
    url: "/feed",
    views: {
      'menuContent': {
        templateUrl: "templates/feed.html",
        controller: "FeedCtrl"
      }
    }
  })

В моем приложении есть следующая ссылка:

<a ui-sref="app.feed({ feedId: 5 })">My Link</a>

Я пытаюсь получить feedId в параметрах состояния:

angular.module('MyApp').controller('FeedCtrl', function($state) {
  console.log($state.params);
});

Но, к сожалению, $state.params всегда {}.

Что я делаю не так?

БОНУСНЫЙ ВОПРОС

Я жду FeedCtrl инициализироваться каждый раз, когда я нажимаю на ссылку, т.е.каждый раз, когда состояние изменяется на app.feed.Итак, если я переключусь между app.feed штат и какой-то другой штат несколько раз, я ожидаю, что console.log выше, чтобы запустить несколько раз.Но похоже, что ui-router инициализируется FeedCtrl только один раз.Почему?

Это было полезно?

Решение

Чтобы передать параметр, мы должны его определить:

 .state('app.feed', {
    url: "/feed/{feedId}",
    views: {
      'menuContent': {
        templateUrl: "templates/feed.html",
        controller: "FeedCtrl"
      }
    }

В данном случае мы определяем его как {feedId}

Посмотреть больше здесь

Некоторые примеры:

  • '/user/{id:[^/]*}' - Такой же как '/user/{id}' из предыдущего примера.
  • '/user/{id:[0-9a-fA-F]{1,8}}' — Аналогично предыдущему примеру, но соответствует только в том случае, если параметр id содержит от 1 до 8 шестнадцатеричных цифр.
  • '/files/{path:.*}' – Сопоставляет любой URL-адрес, начинающийся с «/files/», и записывает остальную часть пути в параметр «path».
  • '/files/*path' - То же самое.Специальный синтаксис для охвата всего.

Если у нас определен параметр, и мы будем перемещаться между состояниями с разными feedId ценности...мы действительно увидим, что этот контроллер FeedCtrl возобновляется.Вот как ui-router был разработан

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top