我們用了這麼久的vue以及其他的vue生態成員後,除了感嘆寫這個玩意的人真**強大之外,有沒有深入的理解過它到底是怎樣做得這麼強大的,在我的掉頭髮研究中,我今天給大家分享一下我其中乙份研究筆記(其實就是本人的學習筆記,哈哈)
vue-router作為vue的生態圈成員之一,在我的理解裡,它是作為vue的乙個外掛程式存在的,所以外掛程式肯定存在乙個install方法來進行外掛程式的安裝,下面我們現在簡單的實現乙個屬於自己的router外掛程式,下面說一下router外掛程式實現的步驟
router的實現思路
vue-router裡面有兩大核心的元件,router-link和router-view,這兩個元件乙個是改變路由位址的值,乙個是顯示的檢視,通過link去改變url,然後view通過url顯示不同的元件是現在router的主要思路,講完思路,下面就用**來實現乙個router
跟著我左手右手乙個慢動作
致命問題
上面的router類,如果技術高超的人,就會發現乙個問題,這樣子的router,如果一有巢狀路由,不就全完蛋了嗎,接下來,我來解決一下嵌到路由的問題。
通過官方的router.js原始碼,我們可以看到官方的實現方法是,給router-view元件新增深度標籤,然後遍歷,我這裡依照它的思路,勉強的去解決一下巢狀路由,當然肯定沒有官方這麼標準
給router-view元件打上乙個識別標籤,證明是router-view
在用遍歷來確定巢狀路由的深度
通過乙個匹配方法來形成乙個路由的陣列,由0開始輸入路由元件
監控url變化後重新匹配
修改一下router-view元件
export
default
} parent = parent.$parent
}}
然後在router類裡定義match方法和matched陣列
class
vuerouter
// 每次路由變化的函式
onhashchange()
// 路由遍歷,形成路由陣列
match
(routes)
// 例如home/aaa home是包含在home/aaa 中
if(route.path !==
'/'&&
this
.current.
indexof
(route.path)!=-
1)return}}
}}
在修改一下router-view元件
let component =
null
const route =
this
.$router.matched[depth]
if(route)
return component
修改後的router類,通過match方法遞迴遍歷routes配置,得到matched陣列,matched陣列是當前路由所形成的陣列,例如home/aaa
形成的陣列就是[home, aaa]
, 這樣子router-view元件可以通過matched陣列以及當前的深度來當前路由的元件,就能實現巢狀路由了
最後親愛的讀者們,以上就是我學習研究vue-router之後想要給大家分享的知識,希望能幫助到各位想要學習的人,本人也是在前端學習的道路上程式設計師,天下程式設計師是一家,希望大家一起進步,覺得這篇幫助到你的可以給個?哦
萬萬沒想到之抓捕孔連順
1.題目描述 我叫王大錘,是一名 我剛剛接到任務 在位元組跳動大街進行埋伏,抓捕 孔連順。和我一起行動的還有另外兩名 我提議我們在位元組跳動大街的 n 個建築中選定 3 個埋伏地點。為了相互照應,我們決定相距最遠的兩名 間的距離不超過 d。我特喵是個天才 經過精密的計算,我們從 x 種可行的埋伏方案...
萬萬沒想到之抓捕孔連順
題目描述 我叫王大錘,是一名 我剛剛接到任務 在位元組跳動大街進行埋伏,抓捕 孔連順。和我一起行動的還有另外兩名 我提議 我們在位元組跳動大街的n個建築中選定3個埋伏地點。為了相互照應,我們決定相距最遠的兩名 間的距離不超過d。我特喵是個天才 經過精密的計算,我們從x種可行的埋伏方案中選擇了一種。這...
位元組跳動春招筆試題萬萬沒想到
萬萬沒想到之聰明的編輯 原題目鏈結 長度大於等於3,才可能出現三個連續相同的情況 長度大於等於4,才可能出現aabb情況 針對這兩種情形,只需要將左邊的指標回退一步即可.include include include using namespace std class solution while ...