Vue.js和vuex:这个。$ store未定义

时间:2017-12-14 13:33:52

标签: typescript vue.js vuejs2

我已经阅读了类似标题的问题,但由于其复杂性,我无法遵循它们。我认为使用我的代码可以更容易地为我找到解决方案。我只会包含相关的代码。

我的商店是这样的: obs:我安装了vuex插件。

   import Vue from 'vue';
import Vuex from 'vuex';


Vue.use(Vuex)

const state = {
    titulo: "please, change title"
}


const mutations = {
    changeTitle(state, title) {
        state.title= title
    }
}


export default new Vuex.Store({

    state : state,
    mutations : mutations
})

我的App.vue

 <template>
    <div>
      <show-title-component ></show-title-component>
      <change-title-component></change-title-component>
    </div>
</template>

<script>


import ShowTitleComponent from './components/ShowtitleComponent';
import ChangeTitleComponent from './components/ChangeTitleComponent';
import store from './vuex/store';

export default {

components: {ShowTitleComponent, ChangeTitleComponent},
store,
data: function() {
  return {title: 'placeholder'}
}


}
</script>

生成错误的组件:

<template><div>{{ title}}</div></template>

<script>

export default {
    name: "show-title-component",
    computed: {
      title() {
        return this.$store.state.title   /** error   here */
      }
    }
}

</script>

5 个答案:

答案 0 :(得分:12)

也许,您没有在{strong> Vue 实例中包含store

您的应用入口点(app.js或main.js或index.js)必须包含以下代码:

import store from './vuex/store'

new Vue({
 ...
 store,
 ...
})

然后您可以在任何组件中使用this.$store

但我推荐一般架构:https://vuex.vuejs.org/en/structure.html enter image description here

答案 1 :(得分:2)

在你的 main.js 文件中

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import Vuex from 'vuex';
import {store}  from './store'  //use curly braces to around store. 

Vue.config.productionTip = false;

Vue.use(Vuex);

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

这对我有用。

答案 2 :(得分:0)

商店文件应该是Javascript(.js)文件。更改文件名并重新启动服务器会导致此问题。$ tore错误消失。

错误实际上在这里:

App.vue

import store from './vuex/store';  /** in my case, it should be js file. */

答案 3 :(得分:0)

1.确保将其创建为商店目录

2。npm i vuex -S

3.确保src/store/index.jsimport Vuex from 'vuex'Vue.use(Vuex)

4.确保src/main.jsimport store from './store'

答案 4 :(得分:0)

就我而言,我正在使用模块。我可以毫无问题地访问突变,动作和吸气剂。但不是状态。解决方案是在使用模块时,状态应使用模块的命名空间进行访问。

检查documentation以获得更多信息。

const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

const moduleB = {
 state: { ... },
 mutations: { ... },
 actions: { ... }
}

const store = new Vuex.Store({
    modules: {
    a: moduleA,
    b: moduleB
  }
})

store.state.a // -> `moduleA`'s state
store.state.b // -> `moduleB`'s state
  

默认情况下,模块内的动作,变异和获取方法仍会在全局名称空间下注册