继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

手动实现 简易版的 Vue-Router

纯情掉了一地
关注TA
已关注
手记 33
粉丝 30
获赞 84
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
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP