这次给大家带来vue使用axios与封装,vue使用axios与封装的注意事项有哪些,下面就是实战案例,一起来看一下。
首先上需求
1.需要封装全局调用
2.返回一个promise对象
3.错误全局统一处理
4.除了登录界面token带入头部
5.登录时候把用户信息自动存到vuex里面
首先上封装代码
<strong>/**<br/> * User: sheyude<br/> * Time: 下午 13:15<br/> *<br/> */<br/>import axios from 'axios';<br/>// 导入<a href="http://www.php.cn/code/10545.html" target="_blank">配置文件</a> 配置文件就导入的请求的前缀地址<br/>import {defaults} from '@/config/'<br/>import storage from './storage'<br/>// 这是一个饿了么的弹框<br/>import { Message } from 'element-ui';<br/>//<a href="http://www.php.cn/code/8586.html" target="_blank">路由</a>配置<br/>import router from '@/router'<br/>/**<br/> * 封装的全局ajax请求<br/> */<br/>class Axios{<br/> constructor (){<br/> this.init();<br/> };<br/> /**<br/> * 初始化<br/> */<br/> init(){<br/> axios.defaults.baseURL = defaults.baseURL;<br/> };<br/> _setUserInfo(data){<br/> // 把请求的数据存入vuex<br/> store.commit('setUserInfo',data);<br/> /**<br/> * 判断是否是登录<br/> * @param url<br/> * @<a href="http://www.php.cn/wiki/135.html" target="_blank">return</a>s {boolean}<br/> * @private<br/> */<br/> _isLogin(url){<br/> if(url != '/app/login'){<br/> axios.defaults.headers = {'x-token': store.state.user.user.token.token};<br/> return false;<br/> }else{<br/> return true;<br/> }<br/> }<br/> <br/> /**<br/> * 判断是否返回数据<br/> * @param data 接收到的数据<br/> * @returns {boolean}<br/> * @private<br/> */<br/> _isStatus(data){<br/> if(data.code == 100){<br/> router.push('/login');<br/> Message.error(data.message || '请重新登录!');<br/> <br/> return false<br/> }else{<br/> return true<br/> }<br/> }<br/> /**<br/> * 全局<a href="http://www.php.cn/code/4817.html" target="_blank">错误处理</a><br/> * @param data 传入错误的数据<br/> * @private<br/> */<br/> _error(data){<br/> console.log(data)<br/> Message.error('网络错误!');<br/> }<br/> <br/> /**<br/> * GET 请求 {es6解构赋值}<br/> * @param type 包含url信息<br/> * @param data 需要发送的参数<br/> * @returns {Promise}<br/> * @constructor<br/> */<br/> HttpGet({url},data) {<br/> console.log(data)<br/> // 创建一个promise对象<br/> this._isLogin(url)<br/> this.promise = new Promise((resolve, reject)=> {<br/> axios.get(url,{params:data})<br/> .then((data) => {<br/> // console.log(data)<br/> if(this._isStatus(data.data)){<br/> resolve(data.data);<br/> }<br/> })<br/> .catch((data) =>{<br/> this._error(data);<br/> })<br/> })<br/> return this.promise;<br/> };<br/> /**<br/> * POST 请求<br/> * @param type <a href="http://www.php.cn/wiki/60.html" target="_blank">Object</a> 包含url信息<br/> * @param data Object 需要发送的参数<br/> * @param urlData Object 需要拼接到地址栏的参数<br/> * @returns {Promise}<br/> * @constructor<br/> */<br/> HttpPost({url},Data,urlData){<br/> <br/> // 判断是否加头部<br/> this._isLogin(url);<br/> // 创建一个promise对象<br/> this.promise = new Promise((resolve, reject)=> {<br/> for(const item in urlData){<br/> url += '/' + urlData[item];<br/> };<br/> axios.post(url,Data)<br/> .then((data) => {<br/> <br/> // 是否请求成功<br/> if(this._isStatus(data.data)){<br/> // 是否需要存数据<br/> if(this._isLogin(url)){<br/> this._setUserInfo(data.data)<br/> };<br/> resolve(data.data)<br/> };<br/> })<br/> .catch((data) =>{<br/> this._error(data);<br/> })<br/> })<br/> return this.promise;<br/> };<br/>};<br/>export default new Axios();</strong>
调用方式
this.$axios.HttpPost(this.audit.auditGet,this.params) .then((data) => { this.pageData = data.data })
接收2个参数
1 url 地址
2 需要传递的参数
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上就是vue使用axios与封装的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号