美文网首页VueAxios
vue axios的使用 及封装

vue axios的使用 及封装

作者: 两年半练习程序员 | 来源:发表于2018-12-18 18:12 被阅读104次

    1.npm/cnpm安装

    $ npm install axios

    安装成功

    2.main.js引入

    // 引入vue
    import Vue from 'vue'
    //引入模板
    import App from './App'
    //引入router
    import router from './router'
    //引入axios
    import axios from 'axios'
    Vue.prototype.$axios=axios
    
    Vue.config.productionTip = false
    new Vue({
        el: '#app',//index.html的id
        router,
        template: '<App/>',//模板--组件调用标签
        components: { App },//组件--模板调用的
    })
    

    3.使用

            created() {
                // axios
                this.$axios({
                    url: 'http://192.168.1.135:8000/v1/user',
                    method: 'get',
                    headers: {
                        'Accept': 'application/json',
                        'Authorization':'Bearer 123'    
                    },
                    data: {
                    },
                    
                })
                .then(res=>{
                    console.log(res.data)
                })
            },
    

    更多时候用方法请参考https://www.kancloud.cn/yunye/axios/234845

    4.封装

    每次使用axios是都要把所有的配置写一遍很是麻烦且不方便维护
    所以将axios封装一下方便使用

    (1.)在main.js同级新建base.js(自定义命名)

    (2.)在main.js中引入

    import base from './base'
    通过全局方法 Vue.use() 使用插件
    Vue.use(base);

    import Vue from 'vue'
    import App from './App'
    import axios from 'axios'
    import base from './base'
    Vue.prototype.$axios=axios
    
    Vue.use(base);
    
    Vue.config.productionTip = false
    
    var main=new Vue({
        el: '#app',//index.html的id
        template: '<App/>',//模板--组件调用标签
        components: { App },//组件--模板调用的
    })
    
    
    // index.html-->main.js-->App.vue(组件)
    

    (3.)封装(在base.js中)

    url, method, data, success, header
    请求地址,请求方法,参数,请求结果处理,请求头
    
    export default {
        install(Vue) { 
            //请求前缀
            Vue.prototype.$axios.defaults.baseURL = 'http://192.168.1.135:8001/index.php?r=';
            //设置超时时间
            Vue.prototype.$axios.defaults.timeout = 10000;
            //请求封装
            Vue.prototype.request = function(url, method, data, success, header) {
                var that=this;
                this.$axios({
                        url: url,
                        method: method,
                        headers: header || {
                            'Accept': 'application/json'
                        },
                        data: method=='post'?JSON.stringify(data):{},
                        params:method=='get'?data:{}
                    })
                    .then(res => {
                        if (success) {
                            success(res.data);
                        }
                    })
                    .catch(res=>{
                        console.log(res)
                    })
            }
        }
    };
    

    (4.)使用

    封装完毕如何使用呢

    post

                    this.request('user/login','post',{
                        username:this.username,
                        password:this.pwd
                    },function(res){
                      //结果处理success
                      console.log(res)
                    });
    

    this指向的是vue

    分别对应

    url:user/login 由于在封装的时候已经设置了Vue.prototype.$axios.defaults.baseURL = 'http://192.168.1.135:8001/index.php?r=';所以这里请求的完整地址是http://192.168.1.135:8001/index.php?r=user/login

    method:post

    data:{
    username:this.username,
    password:this.pwd
    }

    success:function(res){
    //结果处理success
    console.log(res)
    }

    header:这里我们传的为空
    所以直接在封装方法里面匹配到
    {
    'Accept': 'application/json'
    }

    get

                       this.request('home','get',{
                          key:'value'
                        },
                        function(res){
                            console.log(res);//打印结果
                        })
    

    url:http://192.168.1.135:8001/index.php?r=home

    method:get

    data:{
    key:'value'
    }

    axios的get传参为params,post为data,在封装的时候做了处理
    image.png

    Axios 使用说明https://www.kancloud.cn/yunye/axios/234845
    参考文档根据自己需要进行改动

    相关文章

      网友评论

        本文标题:vue axios的使用 及封装

        本文链接:https://www.haomeiwen.com/subject/zvnlkqtx.html