私は基本的なルーティングモジュールを使用して角型アプリケーションを使用しています。以下に私の定義したルートを示します:角度 - 条件付きの経路のみ(ローカルストレージに基づく)
...
const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'register', component: RegisterComponent },
{ path: 'login', component: LoginComponent },
{ path: 'dashboard', component: DashboardComponent }
];
...
今私はダッシュボードルートを保護したいと思います。 localStorage
という名前のオブジェクトがtoken
の場合にのみルーティングします。どうしたらいいですか?
var local = JSON.parse(localStorage.getItem('token'));
のようなもの:チェックされることになっていた場合 https://angular.io/api/router/CanActivate
canActivateメソッドはboolean型を返すことができます:あなたはCanActivateインタフェースを実装し、ルートガードでそれを行うことができます
...
const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{ path: 'home', component: HomeComponent },
{ path: 'register', component: RegisterComponent },
{ path: 'login', component: LoginComponent },
{ path: 'dashboard', checkLogin, component: DashboardComponent }
];
...
function checkLogin(){
// do the logic
}
hereについて詳しく読む:このような? '/ profile'だけでなく、'/dashboard'も保護したいとします。それでは、それぞれのルートごとに関数を書く必要がありますか?どうすればそれをより一般的にすることができますか? – JackSlayer94
'/ dashboard'と'/profile'を保護するロジックが異なっている場合は、明らかにGuardをそれぞれ書く必要があります。しかし、それが同じであれば、既存のガードを再利用することができます。または、ガードが特定の遅延ロードされたモジュールを参照する場合、遅延ローディングを防ぐために親にガードを置くことができます。 –
これはロジックは同じではありません。単一のロジックで両方のルートを扱う方法について上記の例を詳しく説明できますか?私は物事をはっきりとしていない角度に新しいです。 – JackSlayer94