• 在api目录下新建文件http.js
// 接口位置
import Api from './api.js'
import store from '@/store/store.js'
import router from "@/router/index"
import {baseUrl} from '@/config/env.js'
// 设置接口url域名和端口,超时断开连接
axios.defaults.baseURL = baseUrl
axios.defaults.timeout =  15000// 请求拦截(请求携带token)
axios.interceptors.request.use(config => {if (store.getters.getUser.accessToken) {  // 判断是否存在token,如果存在的话,则每个http header都加上tokenconfig.headers.accessToken = store.getters.getUser.accessToken}return config;},err => {return Promise.reject(err)
})// 响应拦截,对返回的状态码判断和进行一些操作
axios.interceptors.response.use(response => {if(response.data.status===401) {store.dispatch('delUser')router.push({path:'/login'})} else if (response.data.status===403) {router.push({path:'/error/403'})} else if(response.data.status===500) {router.push({path:'/error/500'})}if (response.status !==200 || response.data.status !==200) {Vue.prototype.$message({type: "error",message: response.data.errorMsg ? response.data.errorMsg : response.statusText})}return response},error => {return Promise.reject(error)
})export default (function(){// 包含所有请求方法的构造函数function _Http(){}// 获取接口名字(截取接口/最后)http.getName = function(url){let list = url.split('/')return list[list.length-1]}// 包含所有请求和状态的实例对象function http(url = Api){var _httpob = new _Http()url.map(item => {let name = http.getName(item.url)_httpob[name+'Status'] = 1_httpob[name] = function(val = {}) {return _httpob.sendMsg(item.url,val,item.method)}})return _httpob}// axios请求的封装_Http.prototype.sendMsg = function(url,value = {},method ='post') {let name = http.getName(url)var status = {get:() => {return axios.get(url,{params:value}).then(res => {this[name + 'Status'] = 1return res}).catch( res => {Vue.prototype.$message.warning('网络出现问题,请稍后重试')} )},post:() => {return axios.post(url,value).then(res => {this[name+ 'Status'] = 1return res}).catch( res => {Vue.prototype.$message.warning('网络出现问题,请稍后重试')})}}if(this[name+ 'Status']) {this[name + 'Status'] = 0return status[method]()} else {return new Promise(reject => {reject({status:40001})})}} return http
})()
复制代码

这样子封装后_httpob对象里面就包含了所有请求方法和状态属性name+Status,这个属性是为了防止频繁调用接口,保证只有在接口返回response后才能再次调用

  • 接下在再api目录下新建Api.js用来存放接口,类似这样
// 接口(如果是post请求method属性可省略)
const mockApi = [{url:'/api/web/getEchartsData',method:'get'}
]
export default mockApi
复制代码

这样不出意外_httpob里面就包含了getEchartsData(){}方法和getEchartsDataStatus属性

  • 然后在main.js里面调用http()函数
import http from '@/api/http.js'
Vue.prototype.$axios = http()
复制代码
  • 最后我们就可以在组件里面直接调用getEchartsData接口了
// value:需要传递的参数
this.$axios.getEchartsData(value).then(res => {console.log(res)
})
复制代码

大功告成,新手上路,不知道这样封装合不合适,大家多多指教哈哈

vue项目之不一样的axios封装(+防抖函数)相关推荐

  1. 创建vue项目(二)引入elementUi、axios、准备静态资源、封装组件(.vue,js代码等)

    下载安装node -> vue-cli -> 配置路由 -> 引入elementUi -> 公共组件 一.引入elementUi 顺便一提axios使用说明 和axios在vu ...

  2. vue项目中element-ui的分页器(组件封装)

    vue项目中element-ui的分页器组件 <template><el-col :span="24" class="toolbar" sty ...

  3. Vue项目实操cookie相关操作封装

    文章目录 1 介绍 2 utils 3 Test.vue 1 介绍 在vue中通常使用axios进项http请求,但是axios不带cookie,这里可自己获取cookie,放到参数中进行登录验证等, ...

  4. Vue项目antdv中scopedSlots的customRender和customRender函数冲突

    如上代码会因为scopedSlots中有customRender,下面有customRender函数,因此不会出现两个效果,以后面的customRender函数中的return出去的内容为准 // j ...

  5. vue项目:(全局变量设置与调用)API接口封装 - 代码篇

    vue项目,如何将"API接口" 封装为"全局变量" ? 1. API全局配置文件[global.vue文件] <template><div& ...

  6. Vue项目开发过程中解决跨域问题(vue.config.js结合axios)

    一.问题描述 在本地开发过程中,调用后端提供的接口获取数据将获取的数据渲染到页面中,但是浏览器报错: // 控制台报错信息 Access to XMLHttpRequest at 'http://x. ...

  7. Vue 项目中各种痛点问题及方案

    作者:愣锤 原文:https://juejin.im/post/6844903632815521799 最近要求使用vue进行前后端分离开发微信公众号,不断摸索踩坑之后,总结出如下几点vue项目开发中 ...

  8. 实战:vue项目中导入swiper插件

    版本选择 swiper是个常用的插件,现在已经迭代到了第四代:swiper4. 常用的版本是swiper3和swiper4,我选择的是swiper3. 安装 安装swiper3的最新版本3.4.2: ...

  9. vue 中引入阿里图标库,封装iconPicker组件

    一.引入阿里图标库 1.vue项目引入阿里图标库 二.封装iconPicker组件 1.子组件 <template><el-popoverplacement="bottom ...

  10. vue项目中使用mock模拟数据

    一.先在vue项目中安装依赖 # 使用axios发送ajax cnpm install axios --save # 使用mockjs产生随机数据 cnpm install mockjs --save ...

最新文章

  1. js正则表达式/replace替换变量方法
  2. 区块链挖矿的钱从哪来 区块链挖矿怎么挣钱
  3. 程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]
  4. 笔记整理-信息技术服务标准-ITSS组成要素
  5. androidtabhost缓存_Android学习笔记(一):TabHost存放多个Activity
  6. 复旦大学把衣服变成了显示器,能聊天能导航,水洗弯折都不怕
  7. nginx配置目录,nginx配置文件的所在位置,nginx查看已启动的程序
  8. ES5(一)——保护对象
  9. javascript GlobalEventHandlers
  10. Oracle开发环境安装与使用
  11. 编译安装PCL点云库,Kinect2驱动,乐视Astra相机驱动
  12. [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
  13. iPhone企业应用实例分析之四:技术要点分析(1)
  14. 外汇交易:哪个货币对比较好做?
  15. 百度贴吧防删图 动图,万能的小胡
  16. 政府大数据服务,跑马圈地正当时
  17. UML动态模型图简单介绍
  18. imx6 linux 开发环境,米尔iMX6UL开发板Linux操作系统的环境部署
  19. python自动排版公众号_自制微信公众号一键排版工具
  20. oracle数据库报错:ORA-01654: 索引 XXX 无法通过 128 (在表空间 xxx 中) 扩展

热门文章

  1. LCIS最长公共上升子序列
  2. 【工具相关】iOS-Reveal的使用
  3. SQL Server里的 ISNULL 与 NULLIF
  4. 移动开发平台-应用之星app制作教程
  5. Android自动化测试在多种屏幕下的注意事项
  6. WAVE族函数的使用
  7. 关于EasyRecovery的一些高级设置
  8. 利用微查询和数据锐化进行大数据探索
  9. 【云周刊】第148期:“盲人摸象、感而不动、雾里看花”,阿里闵万里谈城市大脑三大挑战...
  10. 移动端click事件延迟300ms到底是怎么回事,该如何解决?