ui-router(0.3.2)在历史记录中不会为正则表达式状态参数触发`$ stateChangeStart`

时间:2018-05-06 13:08:58

标签: javascript angularjs angular-ui-router

请参阅this stackblitz。请注意,我使用的是Angularjs@1.5.7ui-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触发用户使用浏览器的返回转发功能。奇怪的是它会触发,例如state.go()或点击ui-sref链接。

如果counter1路由中的正则表达式更改为{id:.*},它确实按预期工作,但对于我的用例,我需要将其定义为{id:NEW-ID-\d+|}。这是一个已知的错误,还有其他任何解决办法,以确保$stateChangeStart实际上是正确触发?我还没有找到任何东西,并且会对这些想法感激不尽。

0 个答案:

没有答案