vue axios使用,axios的封装

穿精又带淫゛_ 提交于 2021-02-16 23:37:32

一.了解vue axios,vue-resource?

  axios与vue-resource类似于 jQuery的$ajax, 用来处理请求与响应。

   vue2.0之后,就不再对vue-resource更新,而是推荐使用axios,这里不过多介绍,感兴趣的可以去 https://github.com/pagekit/vue-resource

  axios是基于Promise  用于浏览器和node.js的http客户端, axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能。

二.安装和简单使用axios

npm install -save axios vue-axios

  在入口文件main.js下引用,然后挂在原型下 。ps: axios不是插件,所以不能通过Vue.use() 进行注册

import Vue from 'vue'
Vue.prototype.$_axios = axios
// 组件中使用
this.$_axios.get(url).then((res) => {})

   vue-axios  是按照vue插件的方式去写的,是为了符合规范,方便协作。

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'

Vue.use(VueAxios, axios)
// 组件使用
this.$http.get()
this.axios.get()

三.axios封装使用

  为什么要对axios进行封装?

  axios 的定位是 HTTP 工具库,在设计上是作为前后端数据交互的接口层。是和业务无关的,不应该使用 this 和组件关联。应该抽象 API 层出来,在 API 层里面使用,

  在具体页面只需要调用接口函数以及传入params即可。

  做法.新建一个axios文件,在里面新建axios.js 和api.js。axios.js文件用来封装我们的axios,api.js用来统一管理我们的接口。

  

  axios.js

import axios from 'axios'
import qs from 'qs' // 序列化post // 创建实列, 创建不同实列处理(如果有多个请求地址,并且它们的请求和响应不同) const instance = axios.create({ baseURL: '/api', // 自动加在 url之前 timeout: 1000, // 超时请求时间 headers: {'X-Requested-With': 'XMLHttpRequest'} // 自定义请求头部 }) instance.defaults.timeout = 2000 // 优先级高于实列初始值 // requets拦截(在请求响应then,或者catch前拦截它们) 根据返回情况统一弹出信息处理 instance.interceptors.request.use((config) => { config.data = JSON.stringify(config.data) config.headers = { 'Content-Type': 'application/x-www-form-urlencoded' } return config }, (error) => { return Promise.reject(error) }) // response拦截 instance.interceptors.response.use((response) => {
   // 成功处理, example: 返回信息添加msg if (response.status === 200) { response.msg = '请求成功' } return response }, (error) => { // 失败处理 example: 页面404 if(error.response.status === 404) {
   console.log('页面404')
} return Promise.reject(error) }) /** * 封装get方法 */ export function get(url, params = {}) { return new Promise((resolve, reject) => { instance.get(url, { params: params }).then(res => { resolve(res.data) }).catch(err => { reject(err.data) }) }) } /** * 封装post请求 */ export function post(url, data = {}) { return new Promise((resolve, reject) => { instance.post(url, qs.stringify(data)) .then(response => { resolve(response.data) }, err => { reject(err) }) }) }

  api.js 以及组件里调用

// api 层,统一管理接口调用
import {get, post} from './axios.js'

// 1.组件直接导入 import {getWork} from '@/axios/api'
// 使用 getInfo().then(() => {})
export const getInfo = function(data) {
    return get('/api/info', data)
}

// 2.挂载到vue原型上,暴露接口,main.js 引入。
// 全局使用:  this.$_axios.getInfo().then() 
export default {
    install(Vue, options) {
        Vue.prototype.$_axios = {
            getInfo: function(data) {
                return get('/info', data) // 这里的实际请求地址为 /api/info
            }
        }
    }
}

  参考文档

  中文文档

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!