未定义 Vm - 带有 vue CLI 的 vue JS

Vm is not defined - vueJS with vueCLI

我正在为我的项目使用 vue-cli。 vue-route 和 vuex 也添加到项目中。路线运作良好。当我在路由中检查 vuex 存储数据时,出现 vm is not defined 错误。您可以在下面找到代码块。

main.js

// Application
var vm = new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

window.vm = vm;

router.js

import Vue from 'vue'
import Router from 'vue-router'
import auth from './controller/authController'
import Login from './views/Login.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    { path: '/', component: Dashboard, beforeEnter: auth.checkAuth },
    { path: '/login', component: Login }
  ]
})

问题就是从这里开始的。 Auth js 具有 vm 定义,因为它到达了 vuex 存储区。

auth js

function checkAuth() {
  vm.$store.getters.getServerPath();
.... bla bla 
.... bla bla 
}

希望有人给我提意见。如果需要,我可以分享更多细节。

您可以导出和导入 vue 实例,而不是依赖可用的 window 对象。

main.js

// Application
var vm = new Vue({
  router,
  store,
  render: h => h(App)
})
vm.$mount('#app')

export const vueInstance = vm

auth.js

import { vueInstance } from '@/main'
function checkAuth() {
  vueInstance.$store.getters.getServerPath();
.... bla bla 
.... bla bla 
}

我认为在这种情况下更标准的方法是导入和导出 vuex 存储本身,而不是 vue 实例。

因此在您的 auth.js 中导入商店,然后直接访问它的 getters:

import store from '@/app/store/main.store'; // or whatever path it is
function checkAuth() {
  store.getters.getServerPath();
.... bla bla 
.... bla bla 
}

虽然我认为这比将实例(或商店)导出到 window 更好,但您问的是为什么 vm 在您的代码中未定义。我不确定,

您是否尝试直接从 window 引用 vm?我真的不知道,但是 vue-cli 代码或 babel 可能设置了 strict mode,因此您需要明确引用 window:

中的 window 属性
function checkAuth() {
  window.vm.$store.getters.getServerPath();
.... bla bla 
.... bla bla 
}

从安装上看,您似乎使用的是 VueCLI3。 试试这个,不要把它放在 window..

main.js

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount("#app");

router.js

import auth from './auth'
...
{ path: '/', component: Dashboard, beforeEnter: auth.checkAuth }

auth.js

import store from './store'
...
function checkAuth() {
  store.getters.getServerPath();
}
export default checkAuth