在 Vue 组件外访问 VueRouter

Access VueRouter outside Vue components

是否可以在 Vue 组件之外访问 VueRouter。

我试过在 JavaScript 文件中导入 Vue。在此文件中,我可以访问 Vue.http 但不能访问 Vue.routerVue.$router。最后 2 return undefined.

main.js

import Vue from 'vue'
import VueResource from 'vue-resource'
import VueRouter from 'vue-router'

import routes from './config/routes'
import store from './store'
import * as rootUrl from './config/rootUrl'



//Routing support
Vue.use(VueRouter);
//Backend support
Vue.use(VueResource);

const router = new VueRouter({
    mode: 'history',
    routes: routes
})

new Vue({
    store,
    router,
}).$mount('#app')

Vue.http.get(rootUrl.url, {Accept: "application/json"}).then(response => {
    let data = response.body
    store.commit('SET_APP_DATA', { data: {
        'title': data.title,
        'peopleUrl': data.people,
        'eventsUrl':  data.events
    }})
    store.commit('SET_READY')
})

我只在组件中使用过它,但如果您使用的是通用样板,其中路由在 router/index.js 下定义,那么您可以尝试按照以下方式导入它,例如:

import Router from '../router'; 

之后可以在代码中使用它,例如

Router.push('/mypage')

不确定是否有效,但请尝试一下。

您已使用此语句定义路由器

const router = new VueRouter({
    mode: 'history',
    routes: routes
})

因此,要在 Vue 外部访问它,您需要做的就是使用

router.push(...)

或者你想做的任何其他事情。

如果您想在其他文件中使用它,您可能需要在 window 上公开它。

我通过在 routes.js(现在 router.js)

中导出我的路由器而不是我的路由来解决这个问题
export default new VueRouter({
    mode: 'history',
    routes: routes
})

然后任何文件都可以通过

访问路由器
import router from 'config/router'

在您创建并初始化 vue 实例的同一个文件中将路由器添加到 Vue 构造函数。

Vue.$router = router

然后像您第一次尝试的那样使用它。

Vue.$router.push(...)

如果使用 Typescript,您可以扩充 VueContructor 以启用类型检查和自动完成。

mytypes.d.ts

import {VueRouter} from "vue-router/types/router";
declare module 'vue/types/vue' {
  interface VueConstructor {
    $router: VueRouter
  }
}