要求:
/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'
})
或者这个问题有其他解决办法吗?
答案 0 :(得分: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 /:monthNo'也是如此,因此您希望首先使用重定向规则。