angular-路由與導航部分梳理

  1. <base herf>元素 帶路由的應用都要在index.html上的<head>標籤下添加一個<base>元素,來告訴路由該如何合成導航用的URL,如<base herf="/">

  2. Angular的路由是一個可選的服務,用來呈現URL所對應的視圖,並不是Angular核心的一部分,而是在它自己的包中: import { RouterModule, Routes } from '@angular/router';
  3. 路由配置,定義路由後,在app.module.ts的imports中,用RouterModule.forRoot()來配置路由;(先引入RouterModule),在特性模塊中,配置路由時,只能改用RouterModule.forChild();<br>
注意:path不能以/開頭,:id是一個路由參數的令牌(Token);data:存放每個路由有關的任何信息;' '表示默認路徑;** 表示當所請求的URL不匹配時,就定義到這裏,常用於404頁;<br>
  1. 將{*enableTracing:true}作爲第二參數傳給RouterModule.forRoot()可以將每個導航生命週期的事件初出道瀏覽器的控制檯;
  2. 路由出口:<router-outlet></router-let>,在根級模板中配置,比如:body;路由器會把它添加到DOM中,緊接着在它之後插入到導航到的視圖元素;
  3. routerLink可以綁在<a>標籤上,根據用戶操作導航;<a routerLink="/"></a>
  4. 路由器狀態: 在導航時的每個生命週期成功完成時,路由器會構建出一個 ActivatedRoute 組成的樹,它表示路由器的當前狀態。 可以在應用中的任何地方用 Router 服務及其 routerState 屬性來訪問當前的 RouterState 值。 RouterState 中的每個 ActivatedRoute 都提供了從任意激活路由開始向上或向下遍歷路由樹的一種方式,以獲得關於父、子、兄弟路由的信息。paramMap:包含一個當前路由的必要參數和可選參數組成的Map對象;queryParamMap:包含一個對所有路由都有效的查詢參數組成的map對象;
總結: 應用有一個配置過的路由器。 外殼組件中有一個 RouterOutlet,它能顯示路由器所生成的視圖。 它還有一些 RouterLink,用戶可以點擊它們,來通過路由器進行導航。關鍵詞:Router,RouterModule,Routes,Route,RouteOutlet,RouterLink,RouterLinkActive,ActivatedRoute;

  1. 路由器使用匹配者優先的策略來匹配路由;瀏覽器的初始URL爲:localhost:3000/
  • CanActivate 守衛:檢查路由的訪問權限;
  • CanActivateChild 守衛:檢查子路由的訪問權限
  • CanDeactivate 守衛:(詢問是否丟棄未保存的更改)
  • Resolve 守衛:預先獲取路由數據
  • CanLoad 守衛:在加載特性模塊之前進行檢查;
  1. 構造路由模塊: 路由模塊的特性:
  • 把路由單獨分離出來;
  • 測試特性模塊時,可以替換或移除路由模塊;
  • 爲路由服務提供商(包括守衛和解析器)提供一個共同的地方;
  • 不要聲明模塊;
  1. 如果確定哪個組件得實例永遠不會複用,可以使用快照(Snapshot)來作爲Observable得替代品;this.route.snapshot.paramMap.get('id');

  2. 路由守衛: 使用情況: 該用戶可能無權導航到目標組件; 可能用戶得先登陸認證; 在顯示目標組件前,你可能要先保存數據; 在離開組件前,你可能要先保存修改; 你可能要詢問用戶:你是否要放棄本次修改,而不用保存;

  3. 守衛返回一個值:

    • 如果返回true,導航過程會繼續;
    • 返回false,導航過程會終止,守衛返回一個值:且用戶留在原地;
  4. 在分層路由的每個級別上,都可以設置守衛; 路由器會先按照從最深的子路由由下往上檢查的順序來檢查 CanDeactivate() 和 CanActivateChild() 守衛。 然後它會按照從上到下的順序檢查 CanActivate() 守衛。 如果特性模塊是異步加載的,在加載它之前還會檢查 CanLoad() 守衛。 如果任何一個守衛返回 false,其它尚未完成的守衛會被取消,這樣整個導航就被取消了;

  5. 惰性加載優點:

  • 可以在用戶請求是才加載某些特性區;
  • 對於訪問部分應用的用戶,可以加快加載速度;
  • 可以不通過增加初始加載的包體積,而持續擴充惰性加載特性區的功能;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章