【问题标题】:VueJs: cannot use router.pushVueJs:不能使用 router.push
【发布时间】:2019-11-08 05:51:25
【问题描述】:

所以,我想在我的 store.js 上 vue router.push,但我一直收到错误 Cannot read property 'push' of undefined

我已经尝试在我的 store.js 中导入 vue-router,但仍然无效

这是我的 app.js:

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

//Import and install the VueRouter plugin with Vue.use()
Vue.use(VueRouter)

import App from './views/App'
import Home from './views/Home'
import Login from './views/Login.vue'
import Register from './views/Register.vue'

const router = new VueRouter({
    mode: 'history',
    routes: [{
            path: '/',
            name: 'home',
            component: Home,
            meta: { requiresAuth: true }
        },
        {
            path: '/login',
            name: 'login',
            component: Login
        },
        {
            path: '/register',
            name: 'register',
            component: Register
        },
    ],
});



const app = new Vue({
    el: '#app',
    components: { App },
    router,
});

这是我的 store.js :

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex);

export default new Vuex.Store({
    state: {
        accessToken: null,
        loggingIn: false,
        loginError: null
    },

    mutations: {
        loginStart: state => state.loggingIn = true,
        loginStop: (state, errorMessage) => {
            state.loggingIn = false;
            state.loginError = errorMessage;
        },
        updateAccessToken: (state, accessToken) => {
            state.accessToken = accessToken;
        },
        logout: (state) => {
            state.accessToken = null;
        }
    },

    actions: {
        doLogin({ commit }, loginData) {
            commit('loginStart');
            console.log(loginData)

            axios.post('http://localhost:8000/api/login', loginData)
                .then(response => {
                    console.log(response)
                    let accessToken = response.data.jwt;
                    document.cookie = 'jwt_access_token=' + accessToken;
                    commit('updateAccessToken', accessToken);

                    ///this caused the error
                    this.$router.push({ path: '/' })
                })
                .catch(error => {
                    // commit('loginStop', error.response.data.error);
                    console.log(error)
                    commit('updateAccessToken', null);
                    console.log(error.response);
                })
        }
    }
})

如您所见,在我调用 doLogin() 函数并使用 axios 后,它停在 this.$router.push({ path: '/' }) 行,导致错误。

【问题讨论】:

标签: vue.js vuejs2 vuex vue-router


【解决方案1】:

你需要创建一个router.js 文件

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

const router = new Router({
  ...
})

export default router

app.js 中,将 vue-router 的导入替换为新的 router.js 并删除 Vue.use(Router)

在商店中,this 不是 Vue 实例。 在您的store.js 中导入router.js

import router from './router'

那你就可以这样访问了;

router.push({ path: '/' })

我还注意到您尚未将商店添加到 Vue 实例。导入并添加app.js

import store from './store'

...

const app = new Vue({
    el: '#app',
    components: { App },
    router,
    store //<<<<<<<<
});

【讨论】:

    猜你喜欢
    • 2018-09-04
    • 2020-05-31
    • 2018-07-09
    • 1970-01-01
    • 2020-06-23
    • 2023-04-06
    • 2023-03-25
    • 2018-11-12
    • 2019-05-26
    相关资源
    最近更新 更多