angular
guard
Angular Router Guard
2022/01/05 10:11:13
0
1185
Angular 中提供了以下路由守衛:
CanActivate
CanActivateChild
CanDeactivate
Resolve
CanLoad
下面的例子使用 CanActivate:
首先先建立守衛
ng generate guard auth
auth guard 程式如下
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private router: Router) { }
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot) {
window.alert('沒有權限將跳轉至首頁')
this.router.navigate(['/home']);
return false;
}
}
接著在 app-routing page1 頁面 引用 auth-guard
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard } from './core/guards/auth.guard';
import { HomeComponent } from './home/home.component';
import { PageOneComponent } from './page-one/page-one.component';
import { PageTwoComponent } from './page-two/page-two.component';
const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' },
{
path: 'home',
component: HomeComponent,
},
{
path: 'page1',
component: PageOneComponent,
canActivate: [AuthGuard]
},
{
path: 'page2',
component: PageTwoComponent
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
當點擊 page1 連結時觸發路由守衛
結果: 路由首位返回 false, 因此並未導頁 page1, 而是導頁至首頁
接著點擊 page2 連結
結果: 此頁面並未引用路由守衛,因此直接跳轉至 page2
小結: 範例成功地建立了一個路由守衛,使得沒權限的人不能進入 page1,透過簡單的範例,我們可以觀察到當沒權限時是否正確導航到指定目的地。