Vue Router萬萬沒想到你是這樣子的乙個東西

2021-10-03 16:11:45 字數 1705 閱讀 2329

我們用了這麼久的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 ...