1

同じ構造を共有する一連の URL の正しいパスを解決しようとしています。私にはパスが/:id/:areaIdあり/:id/:cityId、これは SEO の理由から設計によって行われます。実装するときは:areaId、(API 呼び出しを行うことによって) 存在するかどうかを知る必要があり、存在しない場合は、そこ:cityIdに移動するために存在するかどうかを確認しようとします。

私が最初に考えたのはcanActivate、サービスを注入する必要があり、私には自然に思えたので、自分のルートでした。ガードを実装してareaコンポーネントに適用しましたが、ここで問題が発生したのcanActivatefalse、ナビゲーションが停止したためです。私は urlMatchers の使用について読んできましたが、セグメントに必要なすべての情報があるとは思いませんし、同じルートを持つ Angular 2 の異なるコンポーネントのようなものを使用してサービスを注入することは私には間違っているように思われ、直接ナビゲートしようとすると失敗しますホームを介してナビゲートするのではなく、URL に移動します。直接ナビゲートする場合、インジェクターは定義されていません。

私の質問は、ガードまたは同様のものを使用して、ガードの結果が false の場合に「次の一致する 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