1

我正在尝试解析一组共享相同结构的 URL 的正确路径。我有路径/:id/:areaId/:id/:cityId这是出于 SEO 原因而设计的。当我开始实现它时,我需要知道是否:areaId存在(通过进行 API 调用),如果不存在,那么我将尝试检查是否:cityId存在以导航到它。

我首先想到的是canActivate在我的路线中,因为我需要注入一个服务,这对我来说似乎很自然。我实现了防护并应用于area组件,我的麻烦canActivatefalse因为导航停止。我一直在阅读有关使用 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;
                                });
    }
}
4

1 回答 1

2

如果我是你,我会创建一个Component来处理这个规范。Guards我不建议在其中进行 HTTP 调用。

您可能只有一条路线并加载新创建的组件。执行您的 HTTP 调用,然后*ngIf您可以通过简单的方式决定要加载的组件。

于 2020-08-21T11:53:22.723 回答