【问题标题】:Access VueRouter outside Vue components在 Vue 组件之外访问 VueRouter
【发布时间】:2017-09-19 08:31:47
【问题描述】:

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

我尝试在 JavaScript 文件中导入 Vue。在这个文件中,我可以访问Vue.http,但不能访问Vue.routerVue.$router。最后 2 个返回 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')
})

【问题讨论】:

  • 你能显示你创建路由器的代码吗?
  • 我添加了代码

标签: vuejs2 vue-router


【解决方案1】:

我只在组件中使用过它,但如果您使用的是在 router/index.js 下定义路由的通用样板,您可以尝试以下操作,然后您只需像这样导入它:

import Router from '../router'; 

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

Router.push('/mypage')

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

【讨论】:

  • 我自己刚开始使用 Vue,这是我遇到的第一个问题。希望你能找到解决办法。
  • 这个答案是正确的,GroovyP 只是路由器设置不正确
【解决方案2】:

你已经用这个语句定义了你的路由器

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

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

router.push(...)

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

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

【讨论】:

    【解决方案3】:

    我通过在 routes.js(现在的 router.js)中导出我的路由器而不是我的路由解决了这个问题

    export default new VueRouter({
        mode: 'history',
        routes: routes
    })
    

    任何文件都可以通过

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

    【讨论】:

      【解决方案4】:

      将路由器添加到您创建和初始化 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
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-04
        • 2019-07-18
        • 2019-06-06
        • 1970-01-01
        • 2021-08-25
        • 2020-03-20
        • 2023-01-23
        • 2018-11-09
        • 2020-07-29
        相关资源
        最近更新 更多