好吧,俺認可好像要當一把標題黨了,這篇文章目的是記錄一下對於 spa 的核心 —— 路由的學習,並無什麼超人類的東西,好了,咱們開始吧。
相信仍是有很多的萌新是不知道 SPA 是個啥?是否是想問一句,你是誰?你是否是搞美容的那個 SPA。其實並非,SPA 在前端領域可不是美容的,它是單頁應用的意思,那麼啥是單頁應用呢?在這個時代若是不知道這個名詞的多半是萌新了,咱們也簡單的聊一聊這個東西。css
之前咱們開發應用的時候,會寫多個頁面,好比說首頁、詳情等等,咱們經過點擊頁面的 a 標籤,而後去獲取另外一個頁面,從新加載,或者跳轉。而單頁應用只提供一個 HTML 文件,在頁面初始化的時候加載 js、css 等等,而後經過 js 去動態更新視圖,從而實現交互,這避免了頁面的刷新,跳轉等等。html
So,單頁應用的優勢是啥呢?前端
其實談到 SPA,咱們實現的方法大概就有 hash 和 H5 的 History 兩種,咱們來了解下。
在 HTML5 中,咱們能夠發現 History 多出了幾個 API,咱們來一塊兒走一遍:git
咱們來搞一個簡單的例子,就知道 history 是怎麼作的了。github
<div id="app"> <a class="route" path="a.html">首頁</a> <a class="route" path="b.html">詳情頁</a> </div>
這是 html 文件,下面就是 js 文件了:後端
const routes = document.querySelectorAll('.route'); routes.forEach(route => { route.addEventListener('click', e => { e.preventDefault(); // 在這裏面,咱們也是能夠經過參數的不一樣,而後渲染不一樣的頁面。 const path = route.getAttribute('path'); window.history.pushState({ public: 'data' }, null, path); }, false); }); window.addEventListener('popstate', e => { // 好比說在這裏面能夠經過路徑的不一樣,而後去渲染不一樣的頁面。 }, false);
咱們首先是經過點擊,而後將 data、url 等參數 push 到棧裏面,而後渲染頁面,若是說咱們經過瀏覽器的回退或者前進,就會觸發 popstate,而後經過不一樣路徑進行頁面渲染,其實 history 就是這麼一個基本原理。瀏覽器
這種方案就是去監聽 hash 的變化,而後去作相應的操做,其實很是簡單,咱們須要用到 location.hash 和 hashchange 這個事件就行了,很簡單,和上面的操做差很少這裏就不說了。服務器
若是各位看官看的還行,能夠到 GitHub 裏給我一顆小小的 star 支持一下,謝謝。