スミット。私はその問題を解決する方法は、ユーザーがアドレスバーを経由して移動するのを防ぐことではないので、目的を尋ねました。そうすることで、そのページへの正当なアクセス権を持っている必要があるユーザーのために機能が停止します。ユーザーが既にログインしている場合、なぜ彼女はedit profile
ページに直接アクセスできないのですか?また、ユーザーがブラウザ内で前後のナビゲーションボタンを使用しようとしたときに不具合が発生し、非常にイライラした経験をしています。
あなたはまだそれをしたい場合は...
あなたは
path: 'editProfile',
component: EditProfileComponent,
canActivate:[EditProfileGuard]
EditProfileGuard
あなたのルートの定義にCanActivate
を使用することができますは、フラグがtrueに設定されている場合にのみナビゲーションを許可するサービスです
@Injectable()
export class EditProfileGuard implements CanActivate {
//must be set to true for navigation to succeed
allow = false;
canActivate(){
if(this.allow){
this.allow = false;
return true;
}
else return false;
}
}
ユーザーがブラウザのアドレスバーからナビゲートすると、allow
はfalseなのでアクセスが拒否されます。あなたは
import {EditProfileGuard} from '...'
import {Router} from '@angular/router';
...
export class MyComponent{
constructor(private guard:EditProfileGuard, private router:Router){}
//execute this when link is clicked
goToProfile(){
//so navigation will be allowed
this.guard.allow = true;
this.router.navigateByUrl('editProfile');
}
}
があなたのAppModule
のproviders
配列にサービスを追加することを忘れないでください新しいルートに彼女を送信する前に
ユーザーがナビゲーションメニュー内のリンクをクリックすると、trueにallow
を設定します。が
私は概要ページへcheckoutID
必要なパラメータになるだろう、そのルート定義は、チェックアウトのページへのリンク(またはユーザーが保存したURL /summary/:id
次のようになります。下のコメントに応えて
)にはid
があり、要約コンポーネントではその詳細情報を取得して表示するためにid
を使用できます。
チェックアウトしていないユーザーが要約ページに直接移動しようとすると、id
がなくなり、ナビゲーションが失敗します。要約コンポーネントのngOnInit
において
ユーザが偽id
を発明し、移動しようとすると、Iコンポーネントをロードする代わりにリダイレクトすることができるように、私は、id
を検証することになります。
これにより、正当なユーザーが直接ナビゲートしたり、ナビゲーションを仕事に進めることができます。
ユーザーがナビゲーションメニューからそのルートに移動してもブラウザのアドレスバーからは直接移動しないとどうしてですか? – BeetleJuice
ビジネス要件。 –
第2に、これとは別に、それが使用されるかもしれない多くのそのようなシナリオがあります。たとえば、ショッピングカートの要約ページがある場合、チェックアウトページに行くことなくユーザーが直接訪問しないようにします。右? –