自己封装的axios里面,怎么调用vuex里的值?
我们项目的流程是,先登录,登录成功后,后台会返回token,签名等等等,需要在后面的所有请求头(request header)里加上
我在vuex里,写了一个返回的方法
//签名算法
mutations: {
setData(state,params){
if(params){
state.YBS_B2B_DATA.Token = params.token;
// 获取userId值
state.YBS_B2B_DATA.userId = params.userId;
// 获取shopId
state.YBS_B2B_DATA.shopId = params.shopId;
//获取当前选择供应商id
state.YBS_B2B_DATA.supplierCompanyId = params.supplierCompanyId;
// 获取供应商列表
state.YBS_B2B_DATA.listB2bFriendCompanyRelation=params.listB2bFriendCompanyRelation;
// 获取companyId值
state.YBS_B2B_DATA.companyId = params.companyId;
// 获取账户类型
state.YBS_B2B_DATA.companyTypeAlias = params.companyTypeAlias;
//签名算法
state.YBS_B2B_DATA.SignatureAlgorithm= (params)=>{
let timestamp = new Date().getTime();
let signature = '';
// key=value组装
let keyValue = [];
for (let key in params) {
let val=params[key];
if (val instanceof Object) {
keyValue.push(key + '=' + JSON.stringify(val));
} else {
if(val===null || val===undefined){
val='';
}
keyValue.push(key + '=' + val );
}
}
keyValue.sort();
keyValue.push('timestamp=' + timestamp);
state.YBS_B2B_DATA.Token && keyValue.push('token=' + state.YBS_B2B_DATA.Token);
// 排序&组装
signature = md5(keyValue.join('&'));
let returnObj = {
signature: signature,
timestamp: timestamp
};
if (state.YBS_B2B_DATA.Token) returnObj.token = state.YBS_B2B_DATA.Token;
return returnObj;
}
}
}
},
比方说 我现在有一个请求
requestThreeLevel(id){
console.log('------------------------');
let _this=this;
this.$axiosPostForm({
method: 'post',
url:this.$store.state.YBS_B2B_DATA.Application_Domain+'/home/getThreeLevel', //这里是你的后端地址,如果没有,请看下面引入mock挡板数据
data: {
userId: id
},
headers:{
token:_this.$store.state.YBS_B2B_DATA.SignatureAlgorithm().token,
signature: _this.$store.state.YBS_B2B_DATA.SignatureAlgorithm().signature,
timestamp: _this.$store.state.YBS_B2B_DATA.SignatureAlgorithm().timestamp
}
}).then(function (res) {
console.log(res);
})
}
那么如果我想一劳永逸,在我封装好的axios.js里面 ,该怎么去获取vuex里面的值呢?
我试了几种方法 ,好像都取不到 ,大佬们教教我
代码附上:
//
const axiosPostForm = axios.create({
baseURL: "", // api的base_url
timeout: 5000, // request timeout
headers: {
'Content-Type': 'application/json'
},
})
补充一下我的项目结构
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
axios 拦截器了解下
store.js
这个文件本质上就是导出一个对象,所以在你这里可以直接这么使用想要取到里面的值 直接使用
store.state
就可以拿到了你在单独的
js
文件中使用this
,要注意它的指向问题