AngularJs $routeProvider:如果满足条件,使用redirectTo重定向
发布时间:2020-12-17 17:45:18 所属栏目:安全 来源:网络整理
导读:我有这些路线: $routeProvider.when('/events/agenda',{...});$routeProvider.when('/events/calendar',{...});$routeProvider.when('/events/:id',{...}); 只有当“:id”是一个数字时才应匹配“/ events /:id”路由…目前,像“/ events / whateverilike
我有这些路线:
$routeProvider.when('/events/agenda',{...}); $routeProvider.when('/events/calendar',{...}); $routeProvider.when('/events/:id',{...}); 只有当“:id”是一个数字时才应匹配“/ events /:id”路由…目前,像“/ events / whateverilike”这样的网址与该路由匹配. 所以我想做的是正常定义我的路线: $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来验证“:id”值.如果是一个数字,继续查看和控制器,否则重定向: redirectTo: function(routeParams,path,search){ if (!+(routeParams.id)) // is :id a number? return '/events/agenda'; return null; } 但是返回null并不会否定重定向. 我真的不想把这个逻辑放在控制器上,因为我相信“url-matching”和验证应该在进入控制器和查看之前进行.我是否正确地理解了这一点,我想要做什么才有意义? 任何帮助和建议将不胜感激. 更新: 使用“返回路径”;然后删除搜索参数.这应该是: redirectTo: function(routeParams,search){ if (!+(routeParams.id)) // is :id a number? return '/events/agenda'; } 最终结果: $routeProvider.when('/events/:id',$route) { return EventLoader({ id: $route.current.params.id }); } },redirectTo: function(routeParams,search){ if (!+(routeParams.id)) // is :id a number? return '/events/agenda'; }); 解决方法
做返回路径;而在redirect中返回null则会修复问题,因为redirectTo应该返回一个它应该导航到的URL.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |