自己封装的axios里面,怎么调用vuex里的值?

发布于 2022-09-11 19:06:52 字数 3462 浏览 13 评论 0

我们项目的流程是,先登录,登录成功后,后台会返回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);
            })
  }
  
  
  

clipboard.png

那么如果我想一劳永逸,在我封装好的axios.js里面 ,该怎么去获取vuex里面的值呢?

clipboard.png

我试了几种方法 ,好像都取不到 ,大佬们教教我
代码附上:

//

const axiosPostForm = axios.create({

baseURL: "", // api的base_url
timeout: 5000, // request timeout
headers: {
    'Content-Type': 'application/json'
    
    
    
    
},

})

补充一下我的项目结构

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南巷近海 2022-09-18 19:06:52

axios 拦截器了解下

悸初 2022-09-18 19:06:52

store.js这个文件本质上就是导出一个对象,所以在你这里可以直接这么使用

import store from '../store'

想要取到里面的值 直接使用 store.state 就可以拿到了
你在单独的js文件中使用 this,要注意它的指向问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文