问题:
在作运营开发工具的时候 我想要请求后台服务器保存成功后 弹出一个弹框(饿了吗 的 message 弹框), 因为$message 是挂在 Vue原型链上的方法 (Vue.prototype.$message = Message;)。如下action.js 中的this不指向Vue,所以如下代码会报错。vue
//action.js export const saveActivity = ({commit},params) => { return Fetch.post(`/activities`,params).then( data => { if(data.code===2000){ this.$message('保存成功') ; // 报错!!! } }) };
解决办法:promise
export const saveActivity = ({commit},params) => { return Fetch.post(`/activities`,params).then( data => { return data }) };
因为action 的处理函数返回的是 promise 对象,此处能够在调用saveActivity 的组件中 .then() 方法中处理:服务器
methods:{ ...mapActions([ 'saveActivity' ]), this.saveActivity(params).then(data=>{ if(data.data.code === 2000){ this.$message({ message: '保存成功', type: 'success', center:true }) } }) }
综上: 虽然没有在 action 中获取到 vue , 可是用了另外一种方法一样实现了个人功能。 之后相似这种问题均可以像这样解决。函数