1.構造vuerouter類
constructor
(options)
的形式 */
this
.routesmap =
this
.createmap
(this
.routes)
;/* 初始化狀態 */
this
.history =
newhistoryroute()
;/* 初始化路由設定 */
this
.init()
;}
2.將routes格式
轉化為
的形式
createmap
(routes),)
;}
3.對hash模式和history模式的路徑進行賦值,設定監聽函式,用this.history.current
儲存當前path
init()
)/* 監聽hash改變 */
window.
addeventlistener
('hashchange',(
)=>)}
else
)/* 前進後退 */
window.
addeventlistener
('popstate',(
)=>)}
}
4.實現每個子元件this.$router
和this.$route
的功能
(1)mixin的內容所有元件適用,並且不會相互干擾
(2)找到根元件並設定this._root=this
,每次例項化子元件時繼承父元件的_root
屬性,然後通過資料劫持的方式獲取到vuerouter例項
(3)對this._router.history
設定響應式,路徑改變檢視更新
vuerouter.
install
=(vue, opts)
=>
else
/* 劫持$router的獲取 */
object.
defineproperty
(this
,'$router',}
)/* 劫持$route的獲取 */
object.
defineproperty
(this
,'$route',}
)}})
;//省略...
}
5.建立router-link
與router-view
(1)router-link
負責提供觸發入口,改變路由狀態
(2)router-view
接受響應並放到render函式中進行檢視更新
vuerouter.
install
=(vue, opts)
=>
, methods:
else
,null
,this
.to);}
//改變狀態,從而更新router-view更新檢視
this
._self._root._router.history.current =
this
.to;}}
,render
(h)`
:this
.to}
>
<
/a>
;else
return
>
<
/tag>}}
);vue.
component
('router-view',}
)}
原始碼: 實現手寫簡單VueRouter原始碼
必須有乙個install方法,供vue.use呼叫 實現hash變化,響應式資料自動更新 let vue class vuerouter 快取route 和 path 的對映關係 this.options.routes.foreach route const initial window.locat...
vue Router實現原理
一 前端路由概念 通過改變 url,在不重新請求頁面的情況下,更新頁面檢視。二 vue router兩種模式 更新檢視但不重新請求頁面,是前端路由原理的核心之一,目前在瀏覽器環境中這一功能的實現主要有2種方式 hash 預設值,利用 url 中的hash history 利用url中的路徑 home...
VueRouter的簡單使用
1.有乙個html檔案裡的dom元素 的id 作為vue例項掛載的入口 2.建立vuerouter檔案 import vue from vue import vuerouter from vue router import vuerouter import helloworld from compo...