我之前寫了一半了,居然又沒見了就離譜,從頭開始。
vue-router是實作了前端路由,也就是url和ui之間的映射關系,當url改變時會引起ui更新,但無需重新整理頁面。那麼如何實作前端路由呢,也就是如何解決這兩個問題:
如何改變url但是頁面不進行重新整理
如何知道url變化了
然後就引出hash和history兩種實作方式解決上面兩個問題。
hash是url中#後面那一部分,改變url中的hash部分不會引起頁面重新整理,通過監聽hashchange可以知道url的變化,改變hashurl的方式有如下幾種:
通過浏覽器前進後退改變url
通過a标簽改變url
通過window.location改變url
然後監聽hash的變化是hashchange
那麼我們來簡單的實作一下hash去改變url并且直接更新ui。
然後我們可以發現,當url改變的時候,ui界面确實發生了更新,但是整個界面并沒有重新渲染。冰狗,完美完成任務。
history改變url的方法有如下兩種:
pushstate,改變url後可以記錄之前到過的url
replacestate,不會記錄之前到過的url
history監聽url改變的方法popstate事件,它的特點如下:
通過浏覽器前進後退改變url時會觸發popstate事件
通過pushstate/replacestate或a标簽改變url不會觸發popstate事件
可以通過攔截pushstate和replacestate的調用和a标簽的點選事件來監聽url的改變
通過js調用history的back,go,forward方法可以觸發該事件
既然懂了,那就讓我們來完美的實驗一下如何用history完成前端路由:
(ps:id選擇器可以直接擷取,然後是拿到了window上面
自己做一個vue的插件,還是很特别的,首先我們知道使用vue-router的話我們是如下這樣簡單使用的:
因為使用到new去new一個vuerouter,是以可以把它當作一個類,其次用到了vue.use(),是以必須要有install方法,那我們來寫一個簡單的:
歐克,寫完了,鳴金收兵。hhh,開玩笑的。
然後我們知道vue-router有許多的内置方法,如push,go,replace等等。這些等之後整理好了再來看。