-
<base herf>元素 帶路由的應用都要在index.html上的<head>標籤下添加一個<base>元素,來告訴路由該如何合成導航用的URL,如<base herf="/">
- Angular的路由是一個可選的服務,用來呈現URL所對應的視圖,並不是Angular核心的一部分,而是在它自己的包中: import { RouterModule, Routes } from '@angular/router';
- 路由配置,定義路由後,在app.module.ts的imports中,用RouterModule.forRoot()來配置路由;(先引入RouterModule),在特性模塊中,配置路由時,只能改用RouterModule.forChild();<br>
注意:path不能以/開頭,:id是一個路由參數的令牌(Token);data:存放每個路由有關的任何信息;' '表示默認路徑;** 表示當所請求的URL不匹配時,就定義到這裏,常用於404頁;<br>
- 將{*enableTracing:true}作爲第二參數傳給RouterModule.forRoot()可以將每個導航生命週期的事件初出道瀏覽器的控制檯;
- 路由出口:<router-outlet></router-let>,在根級模板中配置,比如:body;路由器會把它添加到DOM中,緊接着在它之後插入到導航到的視圖元素;
- routerLink可以綁在<a>標籤上,根據用戶操作導航;<a routerLink="/"></a>
- 路由器狀態: 在導航時的每個生命週期成功完成時,路由器會構建出一個 ActivatedRoute 組成的樹,它表示路由器的當前狀態。 可以在應用中的任何地方用 Router 服務及其 routerState 屬性來訪問當前的 RouterState 值。 RouterState 中的每個 ActivatedRoute 都提供了從任意激活路由開始向上或向下遍歷路由樹的一種方式,以獲得關於父、子、兄弟路由的信息。paramMap:包含一個當前路由的必要參數和可選參數組成的Map對象;queryParamMap:包含一個對所有路由都有效的查詢參數組成的map對象;
總結: 應用有一個配置過的路由器。 外殼組件中有一個 RouterOutlet,它能顯示路由器所生成的視圖。 它還有一些 RouterLink,用戶可以點擊它們,來通過路由器進行導航。關鍵詞:Router,RouterModule,Routes,Route,RouteOutlet,RouterLink,RouterLinkActive,ActivatedRoute;
- 路由器使用匹配者優先的策略來匹配路由;瀏覽器的初始URL爲:localhost:3000/
- CanActivate 守衛:檢查路由的訪問權限;
- CanActivateChild 守衛:檢查子路由的訪問權限
- CanDeactivate 守衛:(詢問是否丟棄未保存的更改)
- Resolve 守衛:預先獲取路由數據
- CanLoad 守衛:在加載特性模塊之前進行檢查;
- 構造路由模塊: 路由模塊的特性:
- 把路由單獨分離出來;
- 測試特性模塊時,可以替換或移除路由模塊;
- 爲路由服務提供商(包括守衛和解析器)提供一個共同的地方;
- 不要聲明模塊;
-
如果確定哪個組件得實例永遠不會複用,可以使用快照(Snapshot)來作爲Observable得替代品;this.route.snapshot.paramMap.get('id');
-
路由守衛: 使用情況: 該用戶可能無權導航到目標組件; 可能用戶得先登陸認證; 在顯示目標組件前,你可能要先保存數據; 在離開組件前,你可能要先保存修改; 你可能要詢問用戶:你是否要放棄本次修改,而不用保存;
-
守衛返回一個值:
- 如果返回true,導航過程會繼續;
- 返回false,導航過程會終止,守衛返回一個值:且用戶留在原地;
-
在分層路由的每個級別上,都可以設置守衛; 路由器會先按照從最深的子路由由下往上檢查的順序來檢查 CanDeactivate() 和 CanActivateChild() 守衛。 然後它會按照從上到下的順序檢查 CanActivate() 守衛。 如果特性模塊是異步加載的,在加載它之前還會檢查 CanLoad() 守衛。 如果任何一個守衛返回 false,其它尚未完成的守衛會被取消,這樣整個導航就被取消了;
-
惰性加載優點:
- 可以在用戶請求是才加載某些特性區;
- 對於訪問部分應用的用戶,可以加快加載速度;
- 可以不通過增加初始加載的包體積,而持續擴充惰性加載特性區的功能;