Я пытаюсь определить правильный путь набора URL-адресов, которые имеют одинаковую структуру. У меня есть путь /:id/:areaId
и /:id/:cityId
, и это сделано по соображениям SEO. Когда я приду к его реализации, мне нужно знать, существует ли :areaId
(выполнив вызов API), и если это не так, я попытаюсь проверить, существует ли :cityId
, чтобы перейти к нему.
Первое, о чем я подумал, это canActivate
в моем маршруте, потому что мне нужно внедрить сервис, и это казалось мне естественным. Я внедрил защиту и применил ее к компоненту area
, и моя проблема заключается в том, что canActivate
становится false
, потому что навигация останавливается. Я читал об использовании urlMatchers, однако я не думаю, что у меня есть вся информация, необходимая в сегментах и сервисах для внедрения с использованием чего-то вроде 2 разных компонента Angular с одним и тем же маршрутом мне кажутся неправильными, а также происходит сбой, если я пытаюсь перейти непосредственно к URL-адресу, а не через дом - инжектор не определяется, когда я перемещаюсь напрямую.
Мой вопрос: используя охранники или что-то подобное, могу ли я перейти к следующему совпадающему URL-адресу, когда результат моей защиты ложен?
Для справки, моя защита выглядит так:
@Injectable()
export class AreaGuard implements CanActivate {
constructor(private areasService: AreasService) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const areaId= route.params['areaId'];
return this.areasService.isArea(areaId)
.then(a => {
return true;
})
.catch(e => {
console.log('Checking area', e);
return false;
});
}
}