91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Angular路由復用策略的示例分析

發布時間:2021-08-17 14:27:44 來源:億速云 閱讀:269 作者:小新 欄目:web開發

這篇文章主要介紹了Angular路由復用策略的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、引言

路由在執行過程中對組件無狀態操作,即路由離退時組件狀態也一并被刪除;當然在絕大多數場景下這是合理的。

但有時一些特殊需求會讓人半死亡狀態,當然這一切都是為了用戶體驗;一種非常常見場景,在移動端中用戶通過關鍵詞搜索商品,而死不死的這樣的列表通常都會是自動下一頁動作,此時用戶好不容易滾動到第二頁并找到想要看的商品時,路由至商品詳情頁,然后一個后退……用戶懵逼了。

Angular路由與組件一開始就透過 RouterModule.forRoot 形成一種關系,當路由命中時利用ComponentFactoryResolver 構建組件,這是路由的本質。

而每一個路由并不一定是一次性消費,Angular 利用 RouteReuseStrategy 貫穿路由狀態并決定構建組件的方式;當然默認情況下(DefaultRouteReuseStrategy)像開頭說的,一切都不進行任何處理。

RouteReuseStrategy 從2就已經是實驗性,當前依然如此,這么久應該是可信任。

二、RouteReuseStrategy

RouteReuseStrategy 我稱它為:路由復用策略;并不復雜,提供了幾種辦法通俗易懂的方法:

  • shouldDetach 是否允許復用路由

  • store 當路由離開時會觸發,存儲路由

  • shouldAttach 是否允許還原路由

  • retrieve 獲取存儲路由

  • shouldReuseRoute 進入路由觸發,是否同一路由時復用路由

這看起來就像是一個時間軸關系,用一種白話文像是這樣:把路由 /list 設置為允許復用(shouldDetach),然后將路由快照存在 store 當中;當 shouldReuseRoute 成立時即:再次遇到 /list 路由后表示需要復用路由,先判斷 shouldAttach 是否允許還原,最后從 retrieve 拿到路由快照并構建組件。

當理解這一原理時,假如我們拿開頭搜索列表返回的問題就變得非常容易解決。

三、一個示例

誠如上面說明的,只需要實現 RouteReuseStrategy 接口即可自定義一個路由利用策略。

1、創建策略

import {RouteReuseStrategy, DefaultUrlSerializer, ActivatedRouteSnapshot, DetachedRouteHandle} from '@angular/router';

export class SimpleReuseStrategy implements RouteReuseStrategy {

  _cacheRouters: { [key: string]: any } = {};

  shouldDetach(route: ActivatedRouteSnapshot): boolean {
    return true;
  }
  store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
    this._cacheRouters[route.routeConfig.path] = {
      snapshot: route,
      handle: handle
    };
  }
  shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return !!this._cacheRouters[route.routeConfig.path];
  }
  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
    return this._cacheRouters[route.routeConfig.path].handle;
  }
  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
    return future.routeConfig === curr.routeConfig;
  }
}

定義一個 _cacheRouters 用于緩存數據(路由快照及當前組件實例對象)。

  • shouldDetach 直接返回 true 表示對所有路由允許復用

  • store 當路由離開時會觸發。按path作為key存儲路由快照&組件當前實例對象;path等同RouterModule.forRoot中的配置。

  • shouldAttach 若 path 在緩存中有的都認為允許還原路由

  • retrieve 從緩存中獲取快照,若無則返回null

  • shouldReuseRoute 進入路由觸發,判斷是否同一路由

2、注冊

最后將策略注冊到模塊當中:

providers: [
 { provide: RouteReuseStrategy, useClass: SimpleReuseStrategy }
]

假設我們有這么一個路由配置:

RouterModule.forRoot([
 { path: 'search', component: SearchComponent },
 { path: 'edit/:id', component: EditComponent }
])

搜索組件用于搜索動作,并在根據搜索結果跳轉至編輯頁,保存后又回到最后搜索結果的狀態(這部分代碼我就不貼有興趣見 plnkr)。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Angular路由復用策略的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长阳| 贺州市| 扎囊县| 新闻| 兴业县| 吐鲁番市| 康保县| 通许县| 军事| 屯昌县| 黔南| 东丽区| 湟源县| 堆龙德庆县| 嘉善县| 浦城县| 阿拉尔市| 牡丹江市| 广西| 柞水县| 肇东市| 阿坝县| 扎兰屯市| 桦川县| 织金县| 漳平市| 奉新县| 邵武市| 渝中区| 吉林市| 措美县| 兴安县| 双柏县| 高安市| 尚志市| 邳州市| 大英县| 天水市| 青川县| 无棣县| 时尚|