vue 在main.js中如何获取store.js中action里定义的异步方法?

store.js

import Vue from 'vue';
import Vuex from 'vuex';
import { getBtnCode } from '../service';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    user: {},
    menus: [],
    btnPermission: [],
  },
  mutations: {
    updateBtnPerm(state, data) {
      state.btnPermission = data;
    },
  },
  actions: {
    async getBtnPermission({ commit }) {
      const res = await getBtnCode();
      const arr = res.split(',');
      commit('updateBtnPerm', arr);
      return Promise.resolve(arr);
    },
  },
  getters: {
    btnPermission(state) {
      return state.btnPermission;
    },
  },
});

export default store;

main.js

import Vue from 'vue';
import i18n from '@/locale';
import '@/styles/variables.less';
import '@/plugins/find';
import App from './App.vue';
import router from './router';
import store from './store';

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

我知道在页面上可以通过this.$store.dispatch('getBtnPermission')获取,但是main.js中怎么获取Action下的异步方法呢?

阅读 2.6k
2 个回答

一般来说 main.js 都会引入 vuex 实例化后的 store 对象。
所以直接使用 store.dispatch('ActionName') 就可以了。

我就复制官网的例子来举例了:

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})
// main.js
import store form './store.js'

store.commit('increment')

new Vue({
  el: '#app',
  store: store,
})

使用 stateaction 等等都是同理的。

试试

import store from '@/store'

store.dispatch('xxx')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题