手寫vueRouter-Hash模式
前言
本篇文章主要是給大家帶來vueRouter-Hash模式的手動實現
程式碼實現
let _Vue = null
export default class VueRouter {
static install(Vue) {
if (VueRouter.install.installed) {
return
}
VueRouter.install.installed = true
_Vue = Vue
_Vue.mixin({
beforeCreate() {
if (this.$options.router) {
_Vue.prototype.$router = this.$options.router;
this.$options.router.init();
}
}
})
}
constructor(options) {
this.options = options
this.routeMap = {};
this.data = _Vue.observable({
current: '/#/',
})
}
init() {
this.createRouteMap();
this.initComponents(_Vue);
this.initEvent()
}
createRouteMap() {
this.options.routes.forEach(route => {
this.routeMap[route.path] = route.component
})
}
initComponents(Vue) {
const self = this
Vue.component('router-link', {
props: {
to: String
},
render(h) {
return h('a', {
attrs: {
href: this.to,
},
on: {
click: this.clickHandler,
}
}, [this.$slots.default])
},
methods: {
clickHandler(e) {
location.hash = this.to
this.$router.data.current = this.to
e.preventDefault();
}
},
},
)
Vue.component('router-view', {
render(h) {
const component = self.routeMap[self.data.current]
return h(component)
}
})
}
initEvent() {
window.addEventListener('onhashchange', () => {
this.data.current = window.location.hash
})
}
}
謝謝觀看,如有不足,敬請指教
相關文章
- 面試之---手寫單例模式面試單例模式
- 手寫node可讀流之流動模式模式
- 手機寫作業系統之 圖形模式作業系統模式
- KOA2 手寫中介軟體 (裝飾器模式)模式
- 手寫new
- 手寫 PromisePromise
- 手寫MVVMMVVM
- 手寫bind
- 手寫CountDownLatchCountDownLatch
- 手寫PromisePromise
- Strangler重寫模式模式
- 手寫面試題面試題
- 手寫 SpringSpring
- 手寫vue路由Vue路由
- 手寫bootstorpboot
- 手寫mybatis框架MyBatis框架
- 手寫簽名
- 手寫axiosiOS
- android 利用path 實現手寫板的手寫效果Android
- 手牽手教你寫 Vue 外掛Vue
- 手寫Vuex原始碼Vue原始碼
- JavaScript手寫new方法JavaScript
- 手寫RPC框架RPC框架
- 動手寫 js 沙箱JS
- 嘗試手寫promisePromise
- 前端路由(手寫路由)前端路由
- 手寫簡易PromisePromise
- 手寫簡易webpackWeb
- 自己動手寫PromisePromise
- js手寫日曆JS
- 手寫SpringMvc概要SpringMVC
- 手寫一個PromisePromise
- element 手寫季度元件元件
- 手寫Spring框架Spring框架
- 純手寫web框架Web框架
- win10如何設定手寫_w10如何手寫輸入Win10
- 使用React手寫一個手風琴元件React元件
- 手寫Maven的archetype專案腳手架Maven