加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

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

更新:
使用了标记的答案后,我很快意识到如果网址包含搜索参数,则存在问题,即:#/ 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读