欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Angular路由復用策略

 更新時間:2017年10月04日 09:08:28   作者:cipchk  
本篇文章主要介紹了淺談Angular路由復用策略,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、引言

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

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

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

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

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

二、RouteReuseStrategy

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

  • shouldDetach 是否允許復用路由
  • store 當路由離開時會觸發(fā),存儲路由
  • shouldAttach 是否允許還原路由
  • retrieve 獲取存儲路由
  • shouldReuseRoute 進入路由觸發(fā),是否同一路由時復用路由

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

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

三、一個示例

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

1、創(chuàng)建策略

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 用于緩存數(shù)據(jù)(路由快照及當前組件實例對象)。

  • shouldDetach 直接返回 true 表示對所有路由允許復用
  • store 當路由離開時會觸發(fā)。按path作為key存儲路由快照&組件當前實例對象;path等同RouterModule.forRoot中的配置。
  • shouldAttach 若 path 在緩存中有的都認為允許還原路由
  • retrieve 從緩存中獲取快照,若無則返回null
  • shouldReuseRoute 進入路由觸發(fā),判斷是否同一路由

2、注冊

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

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

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

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

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

四、結(jié)論

上述只是一個簡單的拋磚引玉作用,實則對于復用的判斷會更復雜、滾動條位置、緩存清理等等。

善用這種路由復用策略機制可以解決很多Web體驗上的問題。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Angular 中的路由詳解

    Angular 中的路由詳解

    路由是實現(xiàn)單頁面應用的一種方式,通過監(jiān)聽hash或者history的變化,渲染不同的組件,起到局部更新的作用,避免每次URL變化都向服務器請求數(shù)據(jù),本文給大家介紹Angular 中的路由,感興趣的朋友一起看看吧
    2023-11-11
  • AngularJS入門教程之MVC架構實例分析

    AngularJS入門教程之MVC架構實例分析

    這篇文章主要介紹了AngularJS的MVC架構,結(jié)合實例形式重點分析了ng-controller聲明并使用控制器的操作技巧與控制器作用域的相關注意事項,需要的朋友可以參考下
    2016-11-11
  • Angular7.2.7路由使用初體驗

    Angular7.2.7路由使用初體驗

    這篇文章主要介紹了Angular7.2.7路由使用初體驗,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Angular2使用Angular CLI快速搭建工程(一)

    Angular2使用Angular CLI快速搭建工程(一)

    這篇文章主要介紹了Angular2使用Angular CLI快速搭建工程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 基于angular6.0實現(xiàn)的一個組件懶加載功能示例

    基于angular6.0實現(xiàn)的一個組件懶加載功能示例

    這篇文章主要介紹了基于angular6.0實現(xiàn)的一個組件懶加載功能示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Angular 向組件傳遞模板的兩種方法

    Angular 向組件傳遞模板的兩種方法

    這篇文章主要介紹了Angular 向組件傳遞模板的兩種方法,第一種方式<ng-content>第二種方式是NgTemplateOutlet 指令及各種使用方式介紹,需要的朋友可以參考下
    2018-02-02
  • AngularJS Bootstrap詳細介紹及實例代碼

    AngularJS Bootstrap詳細介紹及實例代碼

    本文主要介紹AngularJS Bootstrap,這兩對AngularJS Bootstrap的基礎知識做了詳細講解,并提供簡單示例,有需要的小伙伴可以參考下
    2016-07-07
  • Angular.js ng-file-upload結(jié)合springMVC的使用教程

    Angular.js ng-file-upload結(jié)合springMVC的使用教程

    這篇文章主要給大家介紹了關于Angular.js文件上傳控件ng-file-upload結(jié)合springMVC的使用教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Angular.Js之Scope作用域的學習教程

    Angular.Js之Scope作用域的學習教程

    這篇文章主要給大家分享了關于Angular.Js之Scope作用域的學習教程 ,文中通過多個示例代碼介紹的非常詳細,相信對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • angular.extend方法的具體使用

    angular.extend方法的具體使用

    本篇文章主要介紹了angular.extend方法的具體使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論