我正在尝试解析一组共享相同结构的 URL 的正确路径。我有路径/:id/:areaId
,/:id/:cityId
这是出于 SEO 原因而设计的。当我开始实现它时,我需要知道是否:areaId
存在(通过进行 API 调用),如果不存在,那么我将尝试检查是否:cityId
存在以导航到它。
我首先想到的是canActivate
在我的路线中,因为我需要注入一个服务,这对我来说似乎很自然。我实现了防护并应用于area
组件,我的麻烦canActivate
是false
因为导航停止。我一直在阅读有关使用 urlMatchers 的信息,但是我认为我没有细分所需的所有信息,并且使用诸如Angular 2 具有相同路由的不同组件之类的东西注入服务对我来说似乎是错误的,如果我尝试直接导航它也会失败到 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;
});
}
}