定义了一个vue的全局方法,但是可以在组件中调用,确不能再vuex中调用,提示undefined
Vue.prototype.ajax = function (){
alert('aaaaaaa');
};
var store = new Vuex.Store({
state: {
user: {},
},
actions: {
signout: function(context) {
this.ajax();
//undefined
}
}
});
网友回答:
zollero 2018-5-18 10:47 回复:
已被采纳
你把函数定义在 Vue
的原型链上,只能在 Vue
的实例里才能取到这个方法。
vue组件
是一个Vue
的实例,所以你当然能在这里调用到 ajax
方法。
而,vuex
只是一个 vue插件
,在 vuex
里的 this
不是指向 vue实例的
,所以肯定是取不到 ajax
方法的。
建议:把 ajax
函数放在一个单独的模块里定义,这样你在项目的不同地方,可以通过 import
的方式引入使用。
-
jsoncode 2018-5-18 10:49 回复:zollero
除了这个方法没有别的方法了吗? -
zollero 2018-5-18 10:51 回复:zollero
要么你可以直接挂在 window 下或者 Vue 对象下面,这样就可以直接 ajax() 或者 Vue.ajxa() 这样调用
-
jsoncode 2018-5-26 4:28 回复:zollero
根据你的思路,我吧vuex对象打印了出来,看到一个_vm的子对象,然后我发现,这个子对象,就是vue对象,然后我就可以在vuex中使用vue的全局方法了,哈哈::
在vuex的actions中进行调用:this._vm.ajax();就好了。多谢了
Raymond 2020-6-11 5:55 回复:
参考 :
- Vue 全局变量和全局方法(https://www.cnblogs.com/LUA12...)
- Vue 怎么给vue定义全局的方法 (https://github.com/haizlin/fe...)
-
改名字很伤神 2018-5-18 10:45 回复:
这里的
this
怎么可能是Vue
是实例,而且Vuex
也不是这样用的。。。
Meathill 2018-5-18 10:46 回复:
你的方法定义在
Vue
原型链上,在Vuex
实例中当然用不到呀。
另外这个方法也不需要挂在 Vue
上,直接写个函数 import
进来用就好了。
-
jsoncode 2018-5-18 10:48 回复:Meathill
我没有用打包工具,就是在浏览器里写了测试demo,我想把这个方法放到全局vue中,怎么用呢? -
Meathill 2018-5-18 10:49 回复:Meathill
Vue.ajax = function () {}
JS 里万物皆对象,除非人为拒绝写入,不然到处都可以挂。
jsoncode 2018-5-18 11:36 回复:
踩问题的哥们,给提点建议呗,别光踩啊