У меня есть эти маршруты:
$routeProvider.when('/events/agenda', {...});
$routeProvider.when('/events/calendar', {...});
$routeProvider.when('/events/:id', {...});
Маршрут "/events/:id" должен сопоставляться только в том случае, если ":id" является числом... В настоящее время URL-адреса типа "/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» и проверка должны выполняться до перехода к контроллеру и просмотру. Правильно ли я понимаю, имеет ли смысл то, что я пытаюсь сделать?
Любая помощь и предложения будут высоко оценены.
ОБНОВЛЕНИЕ: Воспользовавшись отмеченным ответом, я вскоре понял, что с ним возникла проблема, если 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 path
вместоreturn null
в функции redirectTo. - person Chandermani   schedule 15.01.2014