Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJs$routeProvider:如果满足条件,则使用redirectTo重定向_Angularjs_Route Provider - Fatal编程技术网

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。。。。啊,是的,这很有效。。。我没有尝试,因为逻辑告诉我,我最终会进入一个无限循环。但棱角分明的团队似乎更聪明一些,他们已经处理好了。感谢您的帮助将其添加为答案,以便将问题标记为已回答。