Vue原始碼學習之VueRouter極簡實現

2021-10-08 00:28:05 字數 2185 閱讀 8049

在拉鉤訓練營學習已經有一段時間了,感覺這段時間的收穫遠比自己獨自學習強的多,自己學習的時候經常會因為惰性,無法堅持,在這裡有班主任時刻關注你的學習進度(感覺對我這種懶人蠻好的),最重要的是有了乙個學習的計畫,不用無頭蒼蠅一樣東一點西一點,最後什麼都沒記住。學習都是需要方法和技巧的,在訓練營會有專業的老師為你答疑解惑,同時會教你解決問題的思路及方法,讓你能夠觸類旁通。這篇文章主要是vue原始碼中vuerouter的模擬實現:

最近在學習使用vuerouter的原始碼,這裡簡單介紹下vuerouter的實現

下面是具體**:

main.js 入口檔案

import vue from

'vue'

import router from

'./router'

//router中匯出的vuerouter例項

vue.config.productiontip =

false

newvue()

.$mount

()

上面是vue專案的入口檔案,從router中引入的vuerouter的例項,然後作為引數例項化乙個vue例項

router.js

import vue from

'vue'

// import vuerouter from 'vue-router'

import vuerouter from

'../sourcecode/router'

//vuerouter實現的原始碼

import home from

'../views/home.vue'

vue.

use(vuerouter)

const routes =[,

]const router =

newvuerouter()

export

default router

上面是vuerouter的具體使用,我們在這獲取vuerouter的相關引數

原始碼具體實現(我們在使用vuerouter時先使用vue.use引入,執行其中的intsall,然後在匯出乙個例項化的vuerouter物件)

install方法

initroutemap

initcomponents

initevent

…/sourcecode/router.js

let _vue =

null

export

default

class

vuerouter

//路由位址元件鍵值對

this

.mode = options.mode ||

'hash'

this

.data = _vue.

observable()

//建立響應式物件每當位址變化因為是響應式物件,觸發router-view元件的更新

}//vue的建構函式 args可選引數

static

install

(vue)

vuerouter.install.installed =

true

//2.將vue建構函式記錄到全域性變數

_vue = vue

//3.建立vue例項時傳入的router物件注入到所有vue例項

//混入

_vue.

mixin(}

,})}

initroutemap()

)}initcomponents

(vue)

,// this指向的是當前元件vue例項

render

(h),};

if(this

.$router.mode ===

"history")}

returnh(

'a', props,

[this

.$slots.

default])

},methods:},

})vue.

component

('router-view',}

)}init()

initevent()

)}elseif(

this

.mode ===

'hash'))

}}}

Vue原始碼學習之initEvents

vue原始碼學習之initevents initlifecycle是vue原始碼中core instance events.js下的乙個函式,和上節的initliftcycle一樣,該函式也是在beforecreate鉤子之前呼叫,作用是初始化元件中的事件。下面讓我們來進行 分析。1 initeve...

vue原始碼學習

new vue發生了什麼 此處只針對最簡單基礎的new vue過程,一般專案中採用.vue單檔案元件的形式開發,下面會介紹 對於 runtime compile 版本 初始化乙個 vue 例項的一系列相關環境 watcher,lifecycle,methods等等 compile 將 templat...

Vue原始碼之createElement函式(五)

在render 函式中,最後呼叫的是createelement函式來返回vnode,那麼createelement函式到底完成了什麼功能 1.首先看一下vnode的定義 src core vdom vnode.js vnode被定義為乙個類。2.在createelement中,首先檢測data的型別...