vue3如何实现挂载并使用axios

 更新时间:2022年06月24日 11:08:40   作者:furfur-jiang  
这篇文章主要介绍了vue3如何实现挂载并使用axios,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue3挂载并使用axios

首先在main.js中引入axios并挂载到app.config.globalProperties上

axios配置文件放置./assets/js/axios

main.js

import {
    createApp
} from 'vue'
import App from './App.vue'
import './index.css'
import axios from './assets/js/axios';
const app = createApp(App);
app.use(router).use(ElementPlus).mount('#app')
app.config.globalProperties.$http = axios;

其次配置axios.js文件

axios.js

import axios from "axios";
import qs from "qs";
import {
    ElMessageBox
} from 'element-plus';
// axios.defaults.baseURL = ''  //正式
axios.defaults.baseURL = 'http://localhost:8089' //测试
//post请求头
axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";
//设置超时
axios.defaults.timeout = 10000;
axios.interceptors.request.use(
    config => {
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);
axios.interceptors.response.use(
    response => {
        if (response.status == 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    error => {
        ElMessageBox(JSON.stringify(error), '请求异常', {
            confirmButtonText: '确定',
            callback: action => {}
        });
    }
);
export default {
    post(url, data) {
        return new Promise((resolve, reject) => {
            axios({
                    method: 'post',
                    url,
                    data: qs.stringify(data),
                })
                .then(res => {
                    resolve(res.data)
                })
                .catch(err => {
                    reject(err)
                });
        })
    },
    get(url, data) {
        return new Promise((resolve, reject) => {
            axios({
                    method: 'get',
                    url,
                    params: data,
                })
                .then(res => {
                    resolve(res.data)
                })
                .catch(err => {
                    reject(err)
                })
        })
    }
};

最后在.vue中使用

通过getCurrentInstance拿到的ctx就有了$http可以调用

import {
  defineComponent,
  getCurrentInstance,
  reactive,
  toRefs,
} from "vue";
export default defineComponent({
  name: "demo",
  props: {},
  components: "",
  setup(props, context) {
    //引用全局变量
    const { ctx } = getCurrentInstance();
    console.log(ctx);
    let state = reactive({
      ruleForm: {
        username: "fur",
        password: "123",
      }
    });
    function submitForm() {
      ctx.$http.post("/login/xxx", ruleForm).then((res) => {
        //请求成功
      });
    }
    return {
      ...toRefs(state),
      submitForm,
    };
  },
});

vue全局挂载axios

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
 
  </div>
 
  <script src="./node_modules/vue/dist/vue.js"></script>
  <script src="./node_modules/axios/dist/axios.js"></script>
  <script>
    // 全局挂载axios:给Vue函数添加一个原型属性$axios指向Axios
    // 好处是在vue实例或组件中不用重复引用Axios,直接用this.$axios就能执行axios方法
    Vue.prototype.$axios = axios;
    var App = {
      template: `
        <div><button @click="sendAjax">发请求</button></div>
      `,
      methods: {
        sendAjax() {
          console.log(this.$axios);
        }
      }
    };
    new Vue({
      el: '#app',
      data() {
        return {
 
        }
      },
      template: `
        <App />
      `,
      components: {
        App
      }
    });
  </script>
</body>
</html>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3获取DOM节点的3种方式实例

    Vue3获取DOM节点的3种方式实例

    Vue本来无需操作DOM来更新界面,而且Vue也不推荐我们直接操作DOM,但是我们非要拿到DOM操作DOM怎么办,下面这篇文章主要给大家介绍了关于Vue3获取DOM节点的3种方式,需要的朋友可以参考下
    2023-02-02
  • vue使用csp的简单示例

    vue使用csp的简单示例

    Vue是一套用于构建用户界面的渐进式框架,与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用,下面这篇文章主要给大家介绍了关于vue使用csp的相关资料,需要的朋友可以参考下
    2022-08-08
  • 如何使用vue-json-viewer插件展示JSON格式数据

    如何使用vue-json-viewer插件展示JSON格式数据

    这篇文章主要给大家介绍了关于如何使用vue-json-viewer插件展示JSON格式数据的相关资料,Vue-json-viewer是一个Vue组件,用于在Vue应用中显示JSON数据的可视化工具,需要的朋友可以参考下
    2023-11-11
  • vue-calendar-component 封装多日期选择组件的实例代码

    vue-calendar-component 封装多日期选择组件的实例代码

    这篇文章主要介绍了vue-calendar-component 封装多日期选择组件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 解决ant-design-vue安装报错的问题

    解决ant-design-vue安装报错的问题

    这篇文章主要介绍了解决ant-design-vue安装报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • vue实现百分比占比条效果

    vue实现百分比占比条效果

    这篇文章主要为大家详细介绍了vue实现百分比占比条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • rollup3.x+vue2打包组件的实现

    rollup3.x+vue2打包组件的实现

    本文主要介绍了rollup3.x+vue2打包组件的实现,详细的介绍了打包会存在的问题,包版本的问题,babel 转换jsx等问题,具有一定的参考价值,感兴趣的可以了解一下
    2023-03-03
  • vue+openlayers绘制省市边界线

    vue+openlayers绘制省市边界线

    这篇文章主要为大家详细介绍了vue+openlayers绘制省市边界线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Vue3使用contenteditable打造定制化输入

    Vue3使用contenteditable打造定制化输入

    contenteditable 属性为网页开发者提供了一种灵活的方式来创建可编辑的内容区域,使用户可以直接在网页上进行内容编辑,而无需依赖传统的输入框,本文将利用contenteditable打造定制化输入,感兴趣的可以了解下
    2023-12-12
  • 详解win7 cmd执行vue不是内部命令的解决方法

    详解win7 cmd执行vue不是内部命令的解决方法

    这篇文章主要介绍了详解win7 cmd执行vue不是内部命令的解决方法的相关资料,这里提供了解决问题的详细步骤,具有一定的参考价值,需要的朋友可以参考下
    2017-07-07

最新评论