Angular4 路由
路由時傳遞資料
1.在查詢引數中傳遞資料
/product?id=1&name=2 => ActivateRoute.queryParams[id]
2.在路由路徑中傳遞資料
{path:/product/:id} => /product/1 => ActivateRoute.params[id]
3.在路由配置中傳遞資料
{path:product, component:ProductComponent, data:[{isProd:true}] => ActivatedRoute.data[0][isProd]
路由事件
事件 | description |
---|---|
NavigationStart | 事件開始時觸發 |
RoutesRecognized | 在解析完URL,並識別出了相應的路由時觸發 |
RouteConfigLoadStart | 在Router對一個路由配置進行惰性載入之前觸發 |
RouteConfigLoadEnd | 在Router被惰性加之後觸發 |
NavigationEnd | 導航成功之後觸發 |
NavigationCancel | 導航被取消之後觸發。可能是因為導航期間某個路由守衛返回了false |
NavigationError | 在導航發生意外的錯誤時觸發 |
子路由
語法:
const routes: Router = [
{ path: `home`, component: HomeComponent },
{ path: `others`, component: OthersComponent,
children: [
path: ``, component: XxxComponent,
path: `yyy`, component: YyyComponent
]
},
]
輔助路由
- 在頁面中設定路由插座:
<router-outlet name="aux"></router-outlet>
- 單獨開發一個新元件,只顯示在新定義的插座上。
- 通過設定路由引數,控制輔助路由的插座是否顯示元件內容。
具體設定:{ path: `consult`, component: ConsultComponent, outlet: `aux`}
路由守衛
在設定路由守衛時需先做下面兩步:
一、在
module
中新增providers
二、在routing.module
中新增需要守衛的路由的canActivate
、canDeactivate
或者Resolve
,前兩個是陣列形式,Resolve
是物件形式。
-
CanActivate:處理導航到某路由的情況
在guard檔案中實現CanActivate
介面:canActivate() { var hasPermission:boolean = Math.random() < 0.5; if(!hasPermission) { console.log("使用者無權訪問次股票詳情") } return hasPermission; }
-
CanDeactivate:處理從當前路由離開的情況
在guard檔案中實現CanDeActivate
介面:canDeactivate(component: StockComponent){ if(component.isFocus()){ return true; }else{ return window.confirm("關注一下哦。!") } }
-
Resolve:在路由啟用之前獲取路由資料
在guard檔案中實現Resolve
介面resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any { let id = route.params["id"]; if(id == 1){ return new Stock(1, "IBM"); }else { this.router.navigate([`/home`]); return undefined; } }