请参阅this stackblitz。请注意,我使用的是Angularjs@1.5.7
和ui-router@0.3.2
。
它定义了以下ui-router状态:
$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
触发用户使用浏览器的返回或转发{ em>功能。奇怪的是它会触发,例如state.go()
或点击ui-sref
链接。
如果counter1
路由中的正则表达式更改为{id:.*}
,它确实按预期工作,但对于我的用例,我需要将其定义为{id:NEW-ID-\d+|}
。这是一个已知的错误,还有其他任何解决办法,以确保$stateChangeStart
实际上是正确触发?我还没有找到任何东西,并且会对这些想法感激不尽。