let Vue
class VueRouter {
constructor(options) {
this.$options = options
this.routeMap = {}
this.$options.routes.forEach(route => {
this.routeMap[route.path] = route
})
Vue.util.defineReactive(this, 'current', '/')
window.addEventListener('hashchange', this.onHashChange.bind(this))
}
onHashChange() {
this.current = window.location.hash.slice(1)
}
}
VueRouter.install = function (_Vue) {
Vue = _Vue
Vue.mixin({
beforeCreate() {
let router = this.$options.router
if (!router) return
Vue.prototype.$router = router
}
})
Vue.component('router-view', {
render(h) {
const { routeMap, current } = this.$router
return h(routeMap[current] ? routeMap[current].component : null)
}
})
Vue.component('router-link', {
props: {
to: {
type: String,
default: ''
}
},
render(h) {
return h('a', {
attrs: {
href: `#${this.to}`
}
}, this.$slots.default)
}
})
}
export default VueRouter
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦