首页 > 解决方案 > 从 Vuex 调用 Mixin 全局方法

问题描述

我有一个这样的mixin,带有一个调用axios和处理错误等的请求方法:

import Vue from 'vue'
import axios from 'axios';
    
Vue.mixin({
    methods: {
        request(url, datas) {

        //Call axios and return premise
        [...]
    }
});

我有一个这样的商店:

const actions = {
    selectEmployees: (store, keywords) => {
        this.request(`/users/list/search{/keywords}`).then(e => {
            store.commit('SELECT_EMPLOYEES', e.data)
        });
    }
}
    
let store = new Vuex.Store({
    state: state,
    mutations: mutations,
    getters: getters,
    actions: actions
})

我想使用 request 来调用 axios 但我有这个错误:

挂载钩子中的错误:“TypeError:无法读取未定义的属性“请求””TypeError:无法读取未定义的属性“请求”

标签: vue.jsvuejs2vuex

解决方案


如文档中所述,Mixins用于组件。Vuex 本身并不是一个组件。正如我所看到的,您正在使用新的导入/导出工作方式,只需将您的混音设置为导出的简单函数即可。然后在其他地方要么将它们作为 mixin 附加到 Vue,要么在商店外部使用它。沿线的东西(半代码):

// mixin.js
export default function request() {}

// main.js
Vue.mixin({
    methods: {
        request: mixin.request // will provide this.request in each component
    }
}

// store.js
mixin.request() // will fire the method

推荐阅读