vue3 封装axios

vue3,封装,axios · 浏览次数 : 1777

小编点评

**1. 创建新的http.js文件** ```js const axios = require('axios'); const root2 = 'http://121.4.63.196:8520/api'; function filterNull(o) { for (var key in o) { if (o[key] === null) { delete o[key] } //字符串,对象,数组 if (typeof (o[key]) === 'string') { o[key] = o[key].trim() } else if (typeof (o[key]) === 'object') { alert(o[key]) o[key] = filterNull(o[key]) } else if (typeof (o[key]) === 'array') { o[key] = filterNull(o[key]) } } return o } function apiAxios(method, url, params, success, failure) { //整理参数 if (params) { params = filterNull(params) console.log(params) } axios({ method: method, url: url, data: method === 'post' || method === 'put' ? params : null, params: method === 'get' || method === 'delete' ? params : null, headers: { 'Content-Type': 'application/json' }, baseURL: root2, withCredentials: false }).then(function (res) { if (res.status && res.code) { success(res.data) } }).catch(function (error) { let res = error.response if (error) { console.log('API错误:', res.status) } }) } ``` **2. 导出给vue组件使用** ```js export default ({ get: function (url, params, success, failure) { return apiAxios('get', url, params, success, failure) }, post: function (url, params, success, failure) { return apiAxios('post', url, params, success, failure) }, put: function (url, params, success, failure) { return apiAxios('put', url, params, success, failure) }, delete: function (url, params, success, failure) { return apiAxios('delete', url, params, success, failure) } }) ``` **3. 在main.js里面如何使用** ```js import api from './api/http.js' var app=createApp(App)app.use(routers)//绑定给全局使用 $api可以随便定义 例如 $http $a $b 随喜好app.config.globalProperties.$api=api app.mount('#app') app.vue里面使用this.$api.post('/AutoCode/SendEmail163', { 'email': this.email },r=>{ this.email2=r.message }); ```

正文

1添加一个新的 http.js文件 封装axios

 引入axios 

//引入Axios 
import axios from 'axios'

定义一个根地址

//视你自己的接口地址而定
var root2 = 'http://121.4.63.196:8520/api'

 

定义个小函数来统一参数格式(可写可不写,自己随意)

//参数过滤(去空白)
function filterNull(o) {
    for (var key in o) {
        if (o[key] === null) {
            delete o[key]
        }
        //字符串,对象,数组
        if (typeof (o[key]) === 'string') {
            o[key] = o[key].trim()
        } else if (typeof (o[key] === 'object')) {
            alert(o[key]);
            o[key] = filterNull(o[key])
        } else if (typeof (o[key]) === 'array') {
            o[key] = filterNull(o[key])
        }
    }
    return o
}
参数过滤(去空白)

 

接口处理:重头戏

//接口处理函数
function apiAxios(method, url, params, success) {
    //整理参数
    if (params) {
        params = filterNull(params)
        console.log(params);
    }
    axios({
        method: method,
        url: url,
        data: method === 'post' || method === 'put' ? params : null,
        params: method === 'get' || method === 'delete' ? params : null,
        headers: {
            //'Content-Type':'application/json'
        },
        baseURL: root2,
        withCredentials: false
    }).then(function (res) {
        if (res.State && res.Code) {
        success(res.data)
        }
    }).catch(function (error) {
        let res = error.response
        if (error) {
            console.log('API错误:' + res.State);
        }
    })
}

 

导出给vue组件使用

//返回在vue模板中调用的接口
export default ({
    get: function (url, params, success, failure) {
        return apiAxios('get', url, params, success, failure);
    },
    post: function (url, params, success, failure) {
        return apiAxios('post', url, params, success, failure);
    },
    put: function (url, params, success, failure) {
        return apiAxios('put', url, params, success, failure);
    },
    delete: function (url, params, success, failure) {
        return apiAxios('delete', url, params, success, failure);
    }
})

 

main.js里面如何使用:

//引入接口文件
import api from './api/http.js'

var app=createApp(App)
app.use(routers)
//绑定给全局使用 $api可以随便定义 例如 $http $a $b 随喜好 app.config.globalProperties.$api
=api
 app.mount('#app')

 

app.vue里面使用

this.$api.post('/AutoCode/SendEmail163', { 'email': this.email },r=>{      
      this.email2=r.message
     });

 

与vue3 封装axios相似的内容:

vue3 封装axios

1添加一个新的 http.js文件 封装axios 引入axios //引入Axios import axios from 'axios' 定义一个根地址 //视你自己的接口地址而定 var root2 = 'http://121.4.63.196:8520/api' 定义个小函数来统一参数格式(可

基于Vue3水印组件封装:防篡改守护!

基于Vue 3的全新水印通用组件封装。这款组件不仅功能强大,而且易于集成,能够轻松为您在网页任何位置添加自定义水印,有效防止内容被篡改或盗用。

感受 Vue3 的魔法力量

摆脱了书写声明式的代码,用起来很流畅,提升不少效率,封装可复用逻辑,将 UI 和逻辑分离,提高复用性,view 层代码展示更清晰,少去了很多配置,使用起来更便捷

Vue3中的几个坑,你都见过吗?

Vue3 目前已经趋于稳定,不少代码库都已经开始使用它,很多项目未来也必然要迁移至Vue3。本文记录我在使用Vue3时遇到的一些问题,希望能为其他开发者提供帮助。 1. 使用reactive封装基础数据类型 传统开发模式中,数据声明很简单。但是在Vue中有多个响应式变量声明方式,整体的使用规则如下:

vue3 路由-导航守卫

假设用户登录,在地址栏输入了Login,人性化的设计应该自动回到home页面。或者用户输入不存在路由,也应该回到home页面。 这个时候需要用到vue-router的导航守卫功能。 在我们封装的router.js文件下添加router.beforeEach…… const router = crea

这个vue3的后台管理系统虽然简洁但不简单

今天介绍一个新的Vue后台管理框架,相比其他后台功能丰富管理系统,这个后台管理系统可以用干净简洁来形容——Nova-admin Nova-admin Nova-admin 是一个基于Vue3、Vite5等最新技术的后台管理平台。用简单的方式实现完整功能,并尽可能的考虑代码规范,易读易理解无过度封装,

每日一题:vue3自定义指令大全(呕心沥血所作,附可运行项目源码)

1.VUE常用指令大全 本项目所有指令均为全局注册,使用时直接在组件中使用即可。 指令目录:src/directives 页面目录:src/views 具体可查看源码 1.1 权限指令 封装一个权限指令,在模板中根据用户权限来控制元素的显示或隐藏。 permission.js import { re

Vue3快速上手

好久没上传了,闲来无事把囤积已久的笔记给上传上传 1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800+次提交、40+个RFC、600+次PR、300+贡献者 官方发版地址:Release v3.0.0 One Piece · vue

【干货】Vue3 组件通信方式详解

毫无疑问,组件通信是Vue中非常重要的技术之一,它的出现能够使我们非常方便的在不同组件之间进行数据的传递,以达到数据交互的效果。所以,学习组件通信技术是非常有必要的,本文将总结Vue中关于组件通信的八种方式,帮助大家在使用Vue的过程中更加得心应手! 如果文中有不对、疑惑的地方,欢迎在评论区留言指正...

vue3.4的更新,保证你看的明明白白

defineModel 同学已经转正 defineModel 在vue3.3中还是一个实验性功能, 但是经过一个学期的努力,该同学已经转正。 defineModel的简单介绍 defineModel() 返回的值是一个 ref。 它可以像其他 ref 一样被访问以及修改。 它能起到在父组件和当前变量