vue3如何实现挂载并使用axios

作者:furfur-jiang 时间:2023-07-02 16:46:06 

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,
   };
 },
});

vue3如何实现挂载并使用axios

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如何实现挂载并使用axios

来源:https://jiangmq.blog.csdn.net/article/details/116210864

标签:vue3,挂载,axios
0
投稿

猜你喜欢

  • Window 64位下python3.6.2环境搭建图文教程

    2023-07-26 02:22:45
  • Python中如何实现MOOC扫码登录

    2021-10-08 14:24:50
  • Python supervisor强大的进程管理工具的使用

    2021-04-15 09:11:58
  • asp函数InstrRev()介绍及获取文件名例子

    2007-11-19 19:01:00
  • Tortoise-orm信号实现及使用场景源码详解

    2021-12-18 23:01:45
  • Java正则表达式匹配字符串并提取中间值的方法实例

    2022-02-06 11:22:43
  • python 遍历可迭代对象的实现方法

    2021-03-02 07:13:07
  • python如何变换环境

    2021-06-02 19:19:44
  • Django零基础入门之模板变量详解

    2023-03-19 11:17:16
  • python 如何对Series中的每一个数据做运算

    2023-11-19 23:33:07
  • 用原生js做单页应用

    2024-04-16 09:51:27
  • python实现人性化显示金额数字实例详解

    2023-11-04 12:40:10
  • Python爬虫爬取博客实现可视化过程解析

    2023-12-16 08:58:33
  • 对Python中小整数对象池和大整数对象池的使用详解

    2023-02-17 18:13:49
  • 验证码-挑战你的智慧

    2008-09-10 13:08:00
  • Windows安装MySQL8.0.28.0.msi方式(图文详解)

    2024-01-24 14:55:24
  • python使用ProjectQ生成量子算法指令集

    2023-03-17 20:26:51
  • vue watch监控对象的简单方法示例

    2024-05-05 09:11:00
  • Pycharm 2020.1 版配置优化的详细教程

    2023-06-30 23:11:55
  • 预防PHPDDOS的发包攻击别人的方法(iis+linux)

    2023-10-14 04:09:34
  • asp之家 网络编程 m.aspxhome.com