Angular ActivatedRoute


Angular ActivatedRoute里面有幾個比較容易混淆的屬性

  • queryParams
  • queryParamMap
  • params
  • paramMap
    queryParams 和 params 都是angular里面的舊屬性。據官網描述,雖然現在仍然可以使用,但可能以后就會被棄用掉,所以建議使用相對應的新的屬性名稱
    Two older properties are still available, however, their replacements are preferable as they may be deprecated in a future Angular version.
    
    params: An Observable that contains the required and optional parameters specific to the route. Use paramMap instead.
    
    queryParams: An Observable that contains the query parameters available to all routes. Use queryParamMap instead.

    那 queryParamMap 和 paramMap有什么區別呢?

    簡單來講, queryParamMap獲取的是activatedRoute 路由中?后面的參數, 比如: user/:id   這里的id;而paramMap獲取的是路由配置中占位符所代表的參數, 比如:user/:id?tab=edit  這里的tab。
    
    當然, queryParamMap還能獲取NavigationExtras里面設置的參數, 比如:
    
        // Set our navigation extras object
        // that contains our global query params and fragment
        let navigationExtras: NavigationExtras = {
          queryParams: { 'session_id': sessionId },
          fragment: 'anchor'
        };
    this.router.navigate(['/login'], navigationExtras);
     
  • ActivatedRoute
  • ActivatedRouteSnapshot
1. Snapshot英文原意是 快照 的意思, 因此 ActivatedRouteSnapshot指的是ActivatedRoute中一個永恆不變的狀態。它是在組建初始化時的一個路由快照。如果我們只想要獲取該組件初始化時路由的信息,
那么我們就使用ActivatedRouteSnapshot. 它會忽略組件初始化之后路由的所有更新狀態。而ActivatedRoute獲取的是組件當前路由的信息。
2. ActivatedRouteSnapshot它存儲的信息是普通的值, 而ActivatedRoute它的信息是放在一個Observable里面的,因此在使用時需要subscribe,同時使用完成后需要unsubscribe. 比如:
// ActivatedRouteSnapshot
 resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Crisis> | Observable<never> { 
  let id = route.paramMap.get('id');
  ......
}

// ActivatedRoute
this.routeSub = this.route.paramMap.subscribe((params) => {
  id = params['id'];
});
可參考下面的文檔了解詳情
https://www.geekboots.com/story/difference-between-activatedroute-and-activatedroutesnapshot-in-angular


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM