У меня есть эти маршруты:
$routeProvider.when('/events/agenda', {...});
$routeProvider.when('/events/calendar', {...});
$routeProvider.when('/events/: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 для проверки: значение «идентификатор». Если его количество, по-прежнему на вид и контроллер, иначе перенаправлять:
redirectTo: function(routeParams, path, search){
if (!+(routeParams.id)) // is :id a number?
return '/events/agenda';
return null;
}
но возвращение нуль не отменяет переадресацию.
Я действительно не хочу ставить эту логику на контроллер, так как я считаю, что «соответствие URL-адресов» и проверка должны произойти перед тем, как перейти к контроллеру и представлению. Я правильно понимаю это, имеет ли смысл то, что я пытаюсь сделать?
Любая помощь и предложения были бы высоко оценены.
UPDATE: Использовав отмеченное ответ, я вскоре понял, что была проблема с ним, если URL содержал поиска Params, а именно:? #/События/4450 присоединиться = истина
Использование «обратный путь ;» затем удалили параметры поиска. Это скорее должно быть:
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» в функции redirectTo. – Chandermani
@Chandermani .... argh, да, это работает ... Я не пробовал, потому что логика сказала мне, что я попаду в бесконечный цикл. Но угловая команда кажется немного умнее, и они справились с ней. Спасибо за помощь. –
Добавьте его в качестве ответа, чтобы на вопрос можно было ответить. – Chandermani