AngularJs$routeProvider:如果满足条件,则使用redirectTo重定向
我有以下路线:AngularJs$routeProvider:如果满足条件,则使用redirectTo重定向,angularjs,route-provider,Angularjs,Route Provider,我有以下路线: $routeProvider.when('/events/agenda', {...}); $routeProvider.when('/events/calendar', {...}); $routeProvider.when('/events/:id', {...}); “/events/:id”路由只有在“:id”是一个数字时才应匹配。。。目前,类似“/events/whateverike”的URL由该路由匹配 因此,我要做的是将我的路线定义为正常路线: $routePro
$routeProvider.when('/events/agenda', {...});
$routeProvider.when('/events/calendar', {...});
$routeProvider.when('/events/:id', {...});
“/events/:id”路由只有在“:id”是一个数字时才应匹配。。。目前,类似“/events/whateverike”的URL由该路由匹配
因此,我要做的是将我的路线定义为正常路线:
$routeProvider.when('/events/:id', { templateUrl: 'views/events/event-profile.html', controller: 'EventProfileCtrl',
resolve: {
event: function (EventLoader, $route) {
return EventLoader({ id: $route.current.params.id });
}
});
但是我想使用重定向来验证“:id”值。如果是数字,则继续查看和控制器,否则重定向:
redirectTo: function(routeParams, path, search){
if (!+(routeParams.id)) // is :id a number?
return '/events/agenda';
return null;
}
但是返回null并不否定重定向
我真的不想把这个逻辑放在控制器上,因为我认为“url匹配”和验证应该在转到控制器和视图之前进行。我的理解正确吗?我想做的有意义吗
任何帮助和建议都将不胜感激
更新:
使用了标记的答案后,我很快意识到,如果url包含搜索参数,即:#/events/4450?join=true,那么它就有问题了
使用“返回路径”,然后删除搜索参数。这应该是:
redirectTo: function(routeParams, path, search){
if (!+(routeParams.id)) // is :id a number?
return '/events/agenda';
}
最终结果:
$routeProvider.when('/events/:id', { templateUrl: 'views/events/event-profile.html', controller: 'EventProfileCtrl',
resolve: {
event: function (EventLoader, $route) {
return EventLoader({ id: $route.current.params.id });
}
},
redirectTo: function(routeParams, path, search){
if (!+(routeParams.id)) // is :id a number?
return '/events/agenda';
});
做
返回路径代码>改为重定向到中的return null
,可以解决这个问题,因为重定向到应该返回它应该导航到的url。您是否尝试过在重定向到函数中执行return null
而不是执行return null
。@Chandermani。。。。啊,是的,这很有效。。。我没有尝试,因为逻辑告诉我,我最终会进入一个无限循环。但棱角分明的团队似乎更聪明一些,他们已经处理好了。感谢您的帮助将其添加为答案,以便将问题标记为已回答。