vue 單頁應用(spa)前端路由實現原理

2021-09-19 21:37:24 字數 1787 閱讀 7048

寫在前面:通常 spa 中前端路由有2種實現方式:

下面就來介紹下這兩種方式具體怎麼實現的

1.history基本介紹

window.history 物件包含瀏覽器的歷史,window.history 物件在編寫時可不使用 window 這個字首。history是實現spa前端路由是一種主流方法,它有幾個原始方法:

在html5,history物件提出了 pushstate() 方法和 replacestate() 方法,這兩個方法可以用來向歷史棧中新增資料,就好像 url 變化了一樣(過去只有 url 變化歷史棧才會變化),這樣就可以很好的模擬瀏覽歷史和前進後退了,現在的前端路由也是基於這個原理實現的。

2.history.pushstate

pushstate(stateobj, title, url) 方法向歷史棧中寫入資料,其第乙個引數是要寫入的資料物件(不大於640kb),第二個引數是頁面的 title, 第三個引數是 url (相對路徑)。

關於pushstate,有幾個值得注意的地方:

3.history.replacestate

replacestate(stateobj, title, url) 和pushstate的區別就在於它不是寫入而是替換修改瀏覽歷史中當前紀錄,其餘和 pushstate一模一樣

4.popstate事件

5.history實現spa前端路由**

a.html

b.html

複製**

// 註冊路由

document.queryselectorall('.api').foreach(item => , link, link);

} else

}, false)

});// 監聽路由

window.addeventlistener('popstate', e => )

}, false)

複製**

popstate監聽函式裡列印的e.state便是history.pushstate()裡傳入的第乙個引數,在這裡即為

1.hash基本介紹

url 中可以帶有乙個 hashhttp://localhost:9000/#/a.html

window 物件中有乙個事件是 onhashchange,以下幾種情況都會觸發這個事件:

2.hash實現spa前端路由**

// 註冊路由

document.queryselectorall('.api').foreach(item => , false)

});// 監聽路由

window.addeventlistener('hashchange', e => )

}, false)

淺看spa單頁應用路由

路由觀察瀏覽器的url的變更。當url 變更時,路由會解析它並生成乙個新的路由例項。乙個基本的路由是這樣的 class router public initialize 讀取url private getroute 解析url private parseroute hash string comp ...

單頁web應用(spa)內部路由原理

可以將路由的實現分為兩部分 1.更新url頁面不重新整理 2.監聽url的變化,執行頁面替換邏輯 兩種實現方法 1.history.pushstate,replacestate等觸發popstate事件 2.location.hash的變化觸發hashchange事件 function getuui...

單頁應用SPA 多頁應用MPA

spa單頁應用 第一次進入頁面的時候會請求乙個html檔案,重新整理清除一下。切換到其他元件,此時路徑也相應變化,但是並沒有新的html檔案請求,頁面內容也變化了。原理是 js會感知到url的變化,通過這一點,可以用js動態的將當前頁面的內容清除掉,然後將下乙個頁面的內容掛載到當前頁面上,這個時候的...