AngularJs $routeProvider:如果满足条件,使用redirectTo重定向

我有这些路线:

$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”和验证应该在进入控制器和查看之前进行.我是否正确地理解了这一点,我想要做什么才有意义?

任何帮助和建议将不胜感激.

更新:
使用了标记的答案后,我很快意识到如果网址包含搜索参数,则存在问题,即:#/ events / 4450?join = true

使用“返回路径”;然后删除搜索参数.这应该是:

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.

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...