国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺談Angular路由復用策略

2024-05-06 15:25:58
字體:
來源:轉載
供稿:網友

一、引言

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

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

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;  }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 花莲市| 岗巴县| 玉环县| 贞丰县| 大竹县| 苍南县| 靖边县| 拉萨市| 杭锦旗| 台北县| 通许县| 家居| 铜川市| 同德县| 神木县| 湘潭县| 临海市| 镇赉县| 和平区| 绥棱县| 南阳市| 长海县| 望谟县| 六枝特区| 石柱| 古蔺县| 清丰县| 连山| 延津县| 涿鹿县| 交口县| 景宁| SHOW| 长寿区| 潞西市| 太谷县| 牡丹江市| 大庆市| 措美县| 皋兰县| 彭泽县|