vue 项目中的this.$get,this.$post等$的用法案例详解

 更新时间:2022年12月10日 09:47:22   作者:jjw_zyfx  
vue.js的插件应该暴露一个install方法。这个方法的第一个参数是vue构造器,第二个参数是一个可选的选项对象,首页要安装axios,本文结合案例代码给大家详细讲解vue 中的this.$get,this.$post等$的用法,一起学习下吧

vue官网上有这么一句话

vue.js的插件应该暴露一个install方法。这个方法的第一个参数是vue构造器,第二个参数是一个可选的选项对象:

注意要首先安装axios 即

npm install axios -S

结合案例:

//  基于axios 封装的http请求插件
const axios = require('axios');
 
/**
 * 以下这种方式需要调用Vue.use方法 调用的时候调用 this.$fetch, this.$post, this.$axios, this.$put, this.$del 方法
 */
function coverFormData (data) {
  return Object.keys(data).map(key => {
    let value = data[key];
    if (typeof value === 'object') {
      value = JSON.stringify(value);
    }
    return encodeURIComponent(key) + '=' + encodeURIComponent(value);
  })
}
const http = {
  install(Vue, Option) {
    axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
    if (Option) {
      // 超时设置
      axios.defaults.timeout = Option.timeout || 10000;
      // 默认请求地址设置
      axios.defaults.baseURL = Option.baseURL || "";
      // 头部设置
      if (Option.headers && typeof Option.headers === 'object') {
        for (let key in Option.headers) {
          if (!Option.headers.hasOwnProperty(key)) continue;
          axios.defaults.headers[key] = Option.headers[key];
        }
      }
      // 请求/响应拦截器
      Option.inRequest && axios.interceptors.request.use(Option.inRequest, error => {
          Promise.reject(error);
      });
      Option.inResponse && axios.interceptors.response.use(Option.inResponse, error => {
          Promise.reject(error);
      });
    }
    /**
     * @param  {string} url
     * @param  {object} params={}  参数可以根据需要自行处理
     */
    const fetch = (url, params = {}, config = {}) => {
      const str = coverFormData(params).join('&');
      return new Promise((resolve, reject) => {
        let address = url;
        if (str) {
          address += '?' + str;
        }
        axios.get(address, config).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };
 
    /**
     * @param  {string} url
     * @param  {object} data={} 参数可以根据需要自行处理
    
     */
    const post = (url, data = {}, config = {}) => {
      let str = coverFormData(data).join('&');
      if (config.headers && config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') > -1) {
        str = JSON.parse(JSON.stringify(data));
      }
      return new Promise((resolve, reject) => {
        axios.post(url, str, config).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };
 
    /**
     * @param  {string} url
     * @param  {object} data={} 参数可以根据需要自行处理
     */
    const put = (url, data = {}, config = {}) => {
      const str = coverFormData(data).join('&');
      return new Promise((resolve, reject) => {
        axios.put(url, str, config).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };
 
    /**
     * @param  {string} url
     * @param  {object} params={}
     */
 
    const del = (url, config = {}) => {
      const str = coverFormData(config).join('&');
      return new Promise((resolve, reject) => {
        axios.delete(url, str).then(res => {
          resolve(res.data);
        }).catch(error => {
          reject(error);
        });
      });
    };
    const data = { axios, fetch, post, put, del };
    // 这个地方说明了为啥使用的时候是this.$fetch, this.$post, this.$axios, this.$put, this.$del 这几个方式
    Object.keys(data).map(item => Object.defineProperty(Vue.prototype, '$' + item, { value: data[item] }));
  }
};
 
export default http;

 然后在main.js中导入包使用:

import http from './assets/js/http';
 
Vue.use(http, {
    timeout: 60000,
    inRequest (config) {
        config.headers['Authorization'] =
            sessionStorage.getItem('TokenType') +" "
            + sessionStorage.getItem('AccessToken');
        return config;
    }, 
    inResponse (response) {
        return response;
    }
});

 之后在子组件中就可以直接使用this.$post等了

比如:

this.$post("你的url", {
        CityId: cityid,
        Type: 3
      })
        .then(res => {
          if (res.Success) {
            this.searchSecondary = res.Data;
          }
        })
        .catch(error => {
          console.log(error);
        });

注意:this.$get是用this.$fetch代替的例如:

this.$fetch("你的url", {
 
    })
      .then(res => {
        console.log(res)
      })
      .catch(error => {
        console.log(error);
      });

到此这篇关于vue 项目中的this.$get,this.$post等$的用法案例详解的文章就介绍到这了,更多相关vue 中的this.$get,this.$post等$的用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解给Vue2路由导航钩子和axios拦截器做个封装

    详解给Vue2路由导航钩子和axios拦截器做个封装

    本篇文章主要介绍了详解给Vue2路由导航钩子和axios拦截器做个封装,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • uni-app 使用编辑器创建vue3 项目并且运行的操作方法

    uni-app 使用编辑器创建vue3 项目并且运行的操作方法

    这篇文章主要介绍了uni-app 使用编辑器创建vue3 项目并且运行的操作方法,目前uniapp 创建的vue3支持 vue3.0 -- 3.2版本 也就是说setup语法糖也是支持的,需要的朋友可以参考下
    2023-01-01
  • Vue3对比Vue2的优点总结

    Vue3对比Vue2的优点总结

    vue3解决了vue2的一些缺陷与弊端,学习新的技术是很有必要的,本文总结了一些vue3的优点,希望各位能尽快转入vue3的使用中
    2021-06-06
  • 基于vuejs+webpack的日期选择插件

    基于vuejs+webpack的日期选择插件

    这篇文章主要为大家详细介绍了基于vuejs+webpack的日期选择插件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Vue Mixins混入介绍与使用

    Vue Mixins混入介绍与使用

    如果我们在每个组件中去重复定义这些属性和方法会使得项目出现代码冗余并提高了维护难度,针对这种情况官方提供了Mixins特性,这时使用Vue mixins混入有很大好处,下面就介绍下Vue mixins混入使用方法,需要的朋友参考下吧
    2023-02-02
  • vue和react项目中key的作用示例详解

    vue和react项目中key的作用示例详解

    这篇文章主要为大家介绍了vue和react项目中key的作用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • vue.js组件之间传递数据的方法

    vue.js组件之间传递数据的方法

    本篇文章主要介绍了vue.js组件之间传递数据的方法,组件实例的作用域是相互独立的,如何传递数据也成了组件的重要知识点之一,有兴趣的可以了解一下
    2017-07-07
  • Vuex中actions优雅处理接口请求的方法

    Vuex中actions优雅处理接口请求的方法

    在项目开发中,如果使用到了 vuex,通常我会将所有的接口请求单独用一个文件管理,这篇文章主要介绍了Vuex中actions如何优雅处理接口请求,业务逻辑写在 actions 中,本文给大家分享完整流程需要的朋友可以参考下
    2022-11-11
  • Vue.js事件处理器与表单控件绑定详解

    Vue.js事件处理器与表单控件绑定详解

    这篇文章主要为大家详细介绍了Vue.js事件处理器与表单控件绑定详解的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • 使用vue-cli导入Element UI组件的方法

    使用vue-cli导入Element UI组件的方法

    这篇文章给大家介绍了使用vue-cli导入Element UI组件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友一起看看吧
    2018-05-05

最新评论