私は、Resolveを使用して、コンポーネントにナビゲートする前に、HTTP呼び出しを使用してリモートソースから一部のデータをあらかじめロードしている状況があります。今私は、いくつかの条件に応じて、データがプリロードされて、現在のユーザーに対してそのフィールドの一部を確認する必要があるガードロジックを実装する必要があります。CanActivate GuardからResolveリゾルバにAngular2が渡すデータはありますか?
私はCanActivate
ガードでバックエンドにまったく同じリクエストを行い、その後すぐにResolve
でそのリクエストを避けたいと考えています。
CanActivate
またはルート設定内のルートデータにアクセスして、リゾルバを一時的にオーバーライドして、データオブジェクトの値を設定する方法がありますか?
私は
route.data['myData'] = value;
のような単純なもので遠ざかってみました。しかし、これは、「オブジェクトが拡張可能ではありません」ので、エラーです。しかし、データがResolve.resolve()
方法のroute.data
要素に生き残っていなかったすべてのエラーを作成していない
this.router.routerState.root.data['myData'] = value;
、:
は、私はまた、のようなものを試してみました。私は、サービスにオブジェクトを一時的にキャッシュのように保存するようなカスタムやハックを避けたいと思います。先進的なプリフェッチやデータの所有権チェックなどをサポートするために、内部ルータ要素間でデータを転送するための標準的なメカニズムはありますか?あなたがResolve
クラスのコンストラクタにルータ、およびアクセスも同じように注入した場合
EDIT routerStateは、作業を行います。しかし、これは後にクリアする必要があります。それ以外の場合は、ナビゲーション呼び出しの間に存続します。