私はcanLoadを怠惰にロードされた状態に追加しました。問題は、router.navigate()を使用して状態が異なる状態から初期化されている場合、ルートパラメータを取得できないということです。私からそれを得るためにそこからそれらを取得しようとするActivatedRouteを注入しようとしている角度2:CanLoad実装からのルートパラメータを取得するにはどうすればよいですか?
export class ProgramGuard implements CanLoad {
canLoad(route: Route): Observable<boolean> {
//route object doesn't have any reference to the route params
let programId = paramFromRoute;
return Observable.create(observer => {
if (programId == authorizedProgramId)
observer.complete(true);
else
observer.complete(false);
}
}
}
:だからここ
は私のルート設定である:
path: 'programs/:programId/dashboard',
loadChildren: './program.module#ProgramModule',
canLoad: [ProgramGuard]
、これはProgramGuardの短いバージョンです。そこには何もない。
ユーザーがブラウザにURLを入力すると、ロケーションオブジェクトからパラメータを抽出できるので問題はありません。しかし、route.navigateを使用すると、ブラウザの位置は以前の状態に設定されます。
ご意見やご感想をお寄せください。
ありがとう@DeborahK。私はあなたが明日書いた最後のオプションを試し、結果についてあなたにお返しします。理論的にはうまくいくはずです。今私がやっているのは、ブラウザのアドレスを更新するlocation.go()と、次にroute.navigate()を実行することです。それは動作しますが、状態のコンポーネントを2回インスタンス化します。 – jorgenv
canActivateガードで親ルートを追加するというあなたのソリューションは@DeborahKを動作させました。私が必要とした唯一の変更はobserver.complete(boolean)の代わりにobserver.next(boolean)を処理することでした(これはcanLoadでは機能しないので変です)。 – jorgenv
よろしくお願いします!それはうまくいった! – DeborahK