微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐