Пожалуйста, смотрите этот стек . Обратите внимание, что я использую Angularjs@1.5.7
и ui-router@0.3.2
.
Он определяет следующие состояния ui-маршрутизатора:
$stateProvider
.state('counter1', {
url: '/counter1/{id:(NEW-ID-\d+|)}?detail',
templateUrl: 'view/counter.html',
controller: ['$scope', '$state', '$interval', counterController]
})
.state('counter2', {
url: '/counter2/:id?detail',
templateUrl: 'view/counter.html',
controller: ['$scope', '$state', '$interval', counterController]
})
Оба состояния идентичны, за исключением того, что counter1
определяет параметр id
как регулярное выражение, тогда как counter2
определяет его простым способом.
Проблема в том, что при этой настройке counterController
'
$scope.$on('$stateChangeStart', () => console.log('$stateChangeStart'))
будет срабатывать только для маршрута counter2
, а не для counter1
, когда пользователь использует браузер back или forward . Странно то, что он срабатывает, например, state.go()
или нажав на ссылку ui-sref
.
Если регулярное выражение в маршруте counter1
изменяется на {id:.*}
, оно работает как положено, но для моего варианта использования мне нужно определить его как {id:NEW-ID-\d+|}
. Является ли это известной ошибкой, и есть ли другой обходной путь, чтобы убедиться, что $stateChangeStart
действительно запущен правильно? Я ничего не нашел и был бы благодарен за идеи.