UI-маршрутизатор рассматривает URL как состояние

У меня есть маршрутизация, как показано ниже

$stateProvider
    ('MasterPage', {
        url: '/',
        templateUrl: 'views/master.html',
})
.state('MasterPage.dashboard', {
    url: 'dashboard',
    templateUrl: 'views/dash.html',
})
.state('MasterPage.test', {
    url: 'test/:id',
    templateUrl: 'views/test.html',
})
$urlRouterProvider.otherwise('/');

У меня есть ссылки, которые позволяют мне переходить с главной страницы на панель инструментов, а затем на тестовую страницу, которая работает нормально. Когда я перехожу на тестовую страницу с идентификатором: 1234, мой URL-адрес становится <HOST>/#/test/1234, и я пытаюсь обновить его. Это дает мне сообщение об ошибке:

Не удается разрешить состояние «MasterPage.test/1234» из «MasterPage.test»

Почему UI-Router рассматривает сегмент URL как состояние?

Обновить У меня нет ui-sref. Я перехожу на тестовую страницу, используя $state.go('MasterPage.test', {id:1234}).


person BiJ    schedule 08.06.2016    source источник


Ответы (1)


Есть рабочий плункер

Эта проблема обычно связана с неправильной настройкой ui-sref

<a ui-sref="MasterPage.test/1234">

нам нужно разделить и передать 1) имя состояния и 2) параметры состояния, подобные этому:

<a ui-sref="MasterPage.test({id:1234})">

В случае, если мы хотим использовать href, нам просто нужно объединить определения parent и child url (parent '/', child 'test/:id') :

<a href="/test/1234">

ПРОДЛЕВАТЬ

Итак, эти состояния (почти без изменений):

    .state('MasterPage', {
      url: '/',
      templateUrl: 'views/master.html',
    })
    .state('MasterPage.dashboard', {
      url: 'dashboard',
      templateUrl: 'views/dash.html',
    })
    .state('MasterPage.test', {
      url: 'test/:id',
      templateUrl: 'views/test.html',
    })

будет работать с этими ссылками

  <a href="#/">
  <a href="#/dashboard">
  <a href="#/test/1234">
  <a href="#/test/9875">
  <a ui-sref="MasterPage">
  <a ui-sref="MasterPage.dashboard">
  <a ui-sref="MasterPage.test({id:2222})">
  <a ui-sref="MasterPage.test({id:4444})">

Есть рабочий плункер

person Radim Köhler    schedule 08.06.2016
comment
У меня нет ui-sref. Я перехожу на тестовую страницу, используя $state.go('MasterPage.test', {id:1234}). - person BiJ; 08.06.2016
comment
ui-sref и $state.go имеют почти одинаковый синтаксис... (ui-sref позади использует $state.go - stackoverflow. com/q/24526801/1679310... значит, это должно работать $state.go('MasterPage.test', {id:1234})... Я могу попробовать создать плункер... - person Radim Köhler; 08.06.2016
comment
Я создал для вас плунжер, показывающий ваше состояние в действии... и он работает ;) - person Radim Köhler; 08.06.2016