• vue axios使用,axios的封装


    一.了解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
                }
            }
        }
    }

      参考文档

      中文文档

  • 相关阅读:
    APIO2007 动物园
    SCOI2010 股票交易
    USACO13NOV No Change G
    洛谷 P3694 邦邦的大合唱站队
    洛谷 P6196 3月月赛 ERR1 代价
    洛谷月赛 ERR1 代价
    Splay 学习笔记
    HNOI2009 梦幻布丁
    乘法逆元
    【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
  • 原文地址:https://www.cnblogs.com/lk4525/p/10830818.html
Copyright © 2020-2023  润新知