12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import View from './components/view'
- import Link from './components/link'
-
- export let _Vue
-
- export function install (Vue) {
- if (install.installed && _Vue === Vue) return
- install.installed = true
-
- _Vue = Vue
-
- const isDef = v => v !== undefined
-
- const registerInstance = (vm, callVal) => {
- let i = vm.$options._parentVnode
- if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
- i(vm, callVal)
- }
- }
-
- Vue.mixin({
- beforeCreate () {
- if (isDef(this.$options.router)) {
- this._routerRoot = this
- this._router = this.$options.router
- this._router.init(this)
- Vue.util.defineReactive(this, '_route', this._router.history.current)
- } else {
- this._routerRoot = (this.$parent && this.$parent._routerRoot) || this
- }
- registerInstance(this, this)
- },
- destroyed () {
- registerInstance(this)
- }
- })
-
- Object.defineProperty(Vue.prototype, '$router', {
- get () { return this._routerRoot._router }
- })
-
- Object.defineProperty(Vue.prototype, '$route', {
- get () { return this._routerRoot._route }
- })
-
- Vue.component('RouterView', View)
- Vue.component('RouterLink', Link)
-
- const strats = Vue.config.optionMergeStrategies
- // use the same hook merging strategy for route hooks
- strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created
- }
|