1

要求:

/month      Redirect to /month/1   (january is the default month)
/month/     Redirect to /month/1
/month/4    No redirect, show april

我最好的尝试:

$routeProvider
  .when('/month/:monthNo', {
    templateUrl: 'views/month.html',
    controller: 'MonthCtrl'
  })

这有效:

  .when('/month', {
    redirectTo: '/month/1'  // default redirect to january
  })

这不会(注意试用斜线:/month/):

  .when('/month/', {
    redirectTo: '/month/1' 
  })

/month/比赛.when('/month/:monthNo'...是这样的:

  .when('/month/:monthNo', {
    runThisCodeFirst: function() { if(!monthNo) redirectTo: '/month/1'}
    templateUrl: 'views/month.html',
    controller: 'MonthCtrl'
  })

或者这个问题还有其他解决方案吗?

4

1 回答 1

2

会不会是您以错误的顺序进行 .when 调用?它们是链式的,因此第一个匹配的 .when 将结束处理。如果我这样做,它会起作用:

.when('/month', {
  redirectTo: '/month/1'
})
.when('/month/:monthNo', {
  template: 'This!'
})

但是,如果我这样做,我会看到您描述的问题:

.when('/month/:monthNo', {
  template: 'This!'
})
.when('/month', {
  redirectTo: '/month/1'
})

所以显然'/month'也匹配'/month/'。但是'/month/:monthNo'也是如此,因此您希望首先拥有重定向规则。

于 2013-09-27T09:12:22.070 回答