成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SPA 路由記憶

starsfun / 2747人閱讀

摘要:路由記憶名詞解釋在中后臺系統(tǒng)開發(fā)中,訪問任何頁面時,認(rèn)證是永遠(yuǎn)繞不過的檻。這個過程,暫且稱之為路由記憶,前面例子中的登錄頁面稱之為記憶節(jié)點。

SPA 路由記憶 名詞解釋

在中后臺系統(tǒng)開發(fā)中,訪問任何頁面時,認(rèn)證是永遠(yuǎn)繞不過的檻。以登錄為例,如果檢測出當(dāng)前用戶未登錄,會強(qiáng)制跳轉(zhuǎn)到登錄頁面提示用戶進(jìn)行登錄。登錄完成后,系統(tǒng)需要跳轉(zhuǎn)至用戶原先想訪問的頁面。這個過程,暫且稱之為路由記憶,前面例子中的登錄頁面稱之為記憶節(jié)點。

解決方案

由前面的例子我們不難得出路由記憶的關(guān)鍵邏輯:

進(jìn)入記憶節(jié)點時記錄目標(biāo)頁面

離開記憶節(jié)點時跳往目標(biāo)頁面(如果存在)

// 目標(biāo)頁面
const target = undefined;

但如此只能滿足存在一個記憶節(jié)點的應(yīng)用,而實際開發(fā)中,我們可能需要多個記憶節(jié)點。當(dāng)應(yīng)用中存在多個記憶節(jié)點時,問題就會慢慢的浮現(xiàn)。

接下來,我們對上面的方案進(jìn)行擴(kuò)展。

記憶節(jié)點集合

首先,我們需要維護(hù)一個記憶節(jié)點的集合:

// 記憶節(jié)點集合
const nodes = [];
上次訪問記錄

在這之前我們得先思考一個問題:由記憶節(jié)點跳往記憶節(jié)點時,是否需要觸發(fā)路由記憶?

當(dāng)然不需要?。?!

當(dāng)進(jìn)入記憶節(jié)點時,我們首先得判斷上一個訪問頁面是否為記憶節(jié)點,是則忽略,否則記錄目標(biāo)頁面。

在這之前,我們需要定義一個變量用來記錄上次訪問頁面,這個變量僅記錄上次訪問頁面即可,無論是否為記憶節(jié)點:

// 上次訪問頁面
const previous = undefined;
記錄目標(biāo)頁面

為保證路由記憶結(jié)果的質(zhì)量,我們需要對每次路由跳轉(zhuǎn)結(jié)束進(jìn)行監(jiān)控(不論成功、取消或者失?。?。

結(jié)合前面的例子,我們現(xiàn)在不難得出,只有在常規(guī)頁面進(jìn)入記憶節(jié)點時,需要對目標(biāo)頁面進(jìn)行記錄。

/**
 * @param to {string} 去往頁面
 */
function mark (to) {
    // 備份上次訪問頁面,防止被覆寫
    const backup = previous;
    // 記錄上次訪問頁面
    previous = to;
    // 如果上一個訪問頁面是記憶節(jié)點,中斷函數(shù)
    if (~nodes.indexOf(backup)) return;
    // 如果去往頁面不是記憶節(jié)點,中斷函數(shù)
    if (!~nodes.indexOf(to)) return;
    // 記錄目標(biāo)頁面
    target = backup;
}
跳往目標(biāo)頁面

在每次路由跳轉(zhuǎn)之前,我們需要檢測是否是記憶節(jié)點進(jìn)入常規(guī)頁面且是否存在目標(biāo)頁面記錄,如果條件都滿足,則打斷原有操作跳往目標(biāo)頁面,并清空目標(biāo)頁面記錄。

/**
 * @param to {string} 去往頁面
 */
function check (to) {
    // 若目標(biāo)頁面不存在,中斷函數(shù)
    if (!target) return;
    // 備份目標(biāo)頁面,防止在使用之前被清空
    const backup = target;
    // 如果去往頁面是記憶節(jié)點,中斷函數(shù)
    if (~nodes.indexOf(to)) return;
    // 如果上次訪問不是記憶節(jié)點,中斷函數(shù)
    if (!~nodes.indexOf(previous)) return;
    // 清空目標(biāo)記錄
    target = undefined;
    // 路由跳轉(zhuǎn),假定執(zhí)行函數(shù)為 navigate
    navigate(target);
}
代碼整合 ES5
var RouterMemory = function (nodes) {
    // 目標(biāo)頁面
    this.target = undefined;
    // 上次訪問頁面
    this.previous = undefined;
    // 記憶節(jié)點集合
    this.nodes = nodes && nodes instanceof Array ? nodes : [];
}

/**
 * 記錄上次訪問及目標(biāo)頁面
 * @param to {string} 去往頁面
 */
RouterMemory.prototype.mark = function (to) {
    // 備份上次訪問頁面,防止被覆寫
    var backup = this.previous;
    // 記錄上次訪問頁面
    this.previous = to;
    // 如果上一個訪問頁面是記憶節(jié)點,中斷函數(shù)
    if (~nodes.indexOf(backup)) return;
    // 如果去往頁面不是記憶節(jié)點,中斷函數(shù)
    if (!~nodes.indexOf(to)) return;
    // 記錄目標(biāo)頁面
    this.target = backup;
}

/**
 * 跳往目標(biāo)頁面
 * @param to {string} 去往頁面
 */
RouterMemory.prototype.check = function (to) {
    // 若目標(biāo)頁面不存在,中斷函數(shù)
    if (!this.target) return;
    // 備份目標(biāo)頁面,防止在使用之前被清空
    const backup = this.target;
    // 如果去往頁面是記憶節(jié)點,中斷函數(shù)
    if (~nodes.indexOf(to)) return;
    // 如果上次訪問不是記憶節(jié)點,中斷函數(shù)
    if (!~nodes.indexOf(this.previous)) return;
    // 清空目標(biāo)頁面
    this.target = undefined;
    // 路由跳轉(zhuǎn),假定執(zhí)行函數(shù)為 navigate
    navigate(this.target);
}
ES Next
class RouterMemory {
    constructor (nodes) {
        // 目標(biāo)頁面
        this.target = undefined;
        // 上次訪問頁面
        this.previous = undefined;
        // 記憶節(jié)點集合
        this.nodes = nodes && nodes instanceof Array ? nodes : [];
    }
    /**
    * @param to {string} 去往頁面
    */
    mark (to) {
        // 備份上次訪問頁面,防止被覆寫
        const backup = this.previous;
        // 記錄上次訪問頁面
        this.previous = to;
        // 如果上一個訪問頁面是記憶節(jié)點,中斷函數(shù)
        if (nodes.includes(backup)) return;
        // 如果去往頁面不是記憶節(jié)點,中斷函數(shù)
        if (!nodes.includes(to)) return;
        // 記錄目標(biāo)頁面
        this.target = backup;
    }
    /**
    * @param to {string} 去往頁面
    */
    check (to) {
        // 若目標(biāo)頁面不存在,中斷函數(shù)
        if (!this.target) return;
        // 備份目標(biāo)頁面,防止在使用之前被清空
        const backup = this.target;
        // 如果去往頁面是記憶節(jié)點,中斷函數(shù)
        if (nodes.includes(to)) return;
        // 如果上次訪問不是記憶節(jié)點,中斷函數(shù)
        if (!nodes.includes(this.previous)) return;
        // 清空目標(biāo)記錄
        this.target = undefined;
        // 路由跳轉(zhuǎn),假定執(zhí)行函數(shù)為 navigate
        navigate(this.target);
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107108.html

相關(guān)文章

  • react 項目構(gòu)建

    摘要:配置方式找到文件如需添加路由則在里面添加,同時需要后端更改配置除了上面的路徑,其他路徑全部指向單頁應(yīng)用多路由預(yù)渲染指南使用說明源碼為方便快速構(gòu)建項目,本例所有配置的代碼均放在項目中。 寫在前面 每次構(gòu)建react項目的時候都會配置一大堆東西,時間久了就會忘記怎么配置。為了方便自己記憶也為了其他開發(fā)者在構(gòu)建react應(yīng)用時能夠快速開發(fā),故作此記錄。 本項目基于 create-react-...

    ACb0y 評論0 收藏0
  • Router入門0x201: 從 URL 到 SPA

    摘要:的全稱是統(tǒng)一資源定位符英文,可以這么說,是一種標(biāo)準(zhǔn),而網(wǎng)址則是符合標(biāo)準(zhǔn)的一種實現(xiàn)而已。渲染器,將組件渲染到頁面上。 0x000 概述 從這一章開始就進(jìn)入路由章節(jié)了,并不直接從如何使用react-route來講,而是從路由的概念和實現(xiàn)來講,達(dá)到知道路由的本質(zhì),而不是只知道如何使用react-route庫的目的,畢竟react-route只是一個庫,是路由的一個實現(xiàn)而已,而不是路由本身。 ...

    honmaple 評論0 收藏0
  • 前端prerender-spa-plugin預(yù)渲染

    摘要:預(yù)渲染構(gòu)建階段生成匹配預(yù)渲染路徑的文件注意每個需要預(yù)渲染的路由都有一個對應(yīng)的。使用安裝中引入代碼打包目錄模板頁面要預(yù)渲染的頁面路由默認(rèn)掛在對象上,可以通過在預(yù)渲染頁面取值渲染時顯示瀏覽器窗口。 prerender-spa-plugin預(yù)渲染:構(gòu)建階段生成匹配預(yù)渲染路徑的 html 文件(注意:每個需要預(yù)渲染的路由都有一個對應(yīng)的html)。構(gòu)建出來的 html 文件已有部分內(nèi)容。 pre...

    godiscoder 評論0 收藏0
  • [譯]如何基于Laravel構(gòu)建Vue應(yīng)用(一)

    摘要:使用能優(yōu)雅的構(gòu)建并且與單頁面應(yīng)用程序完美結(jié)合。我們將重點關(guān)注所需的所有部分,然后在后續(xù)教程中,我們將進(jìn)一步演示如何使用作為層。例如,如果用戶刷新路由,我們將需要匹配該路由并返回應(yīng)用程序模板。運行應(yīng)用程序該基礎(chǔ)用于構(gòu)建具有和路由器的。 使用Laravel能優(yōu)雅的構(gòu)建API并且與Vue單頁面應(yīng)用程序(SPA)完美結(jié)合。在本教程中,我們將展示如何啟動和運行Vue路由器以及用于構(gòu)建SPA的La...

    Rocko 評論0 收藏0
  • SPA那點事

    摘要:單頁面應(yīng)用的出現(xiàn)依然存在著爭議性,我們該如何看待他的兩面性呢接下來小生給大家總結(jié)一下他的優(yōu)缺點。單頁面應(yīng)用的優(yōu)勢無刷新體驗沒有了令人詬病的頁面頻繁刷新,同時節(jié)約瀏覽器資源,路由響應(yīng)比較及時,提升了用戶的體驗。 前端猿一天不學(xué)習(xí)就沒飯吃了,后端猿三天不學(xué)習(xí)仍舊有白米飯擺于桌前。IT行業(yè)的快速發(fā)展一直在推動著前端技術(shù)棧在不斷地更新?lián)Q代,前端的發(fā)展成了互聯(lián)網(wǎng)時代的一個縮影。而單頁面應(yīng)用的發(fā)展...

    PumpkinDylan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<