欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于axios的vue插件,让http请求更简单

程序员文章站 2022-03-04 23:50:40
...

ajax-plus

基于axios 的 Vue 插件

如何使用

npm 模块引入

首先通过 npm 安装

```npm install --save ajax-plus or yarn add ajax-plus -S ```

然后在入口文件引入并配置:

对标axios的配置,详见axios????


import Vue from 'Vue'
// 引入
import ajaxPlus from 'ajax-plus'
// 配置
Vue.use(ajaxPlus, {
    //这里写一些ajax的option,详见axios文档,比如
    baseURL: "https://jsonplaceholder.typicode.com",
    timeout: 150000
})

示例

$ajaxPlus方法

在 Vue 组件上添加了 $ajaxPlus 方法, 使用如下:


// method可以为 get、delete、options、post、put、patch、head

// url为去除baseUrl的

// data为object

this.$ajaxPlus(method, url, data, res =>{
    //success call back code
})

//也可以省略data参数,直接写callback(鉴于有些请求不需要传参数)
this.$ajaxPlus(method, url, res =>{
    //success call back code
})

//$ajaxPlus已经在源码中处理catch容错了,假若想在代码里处理报错,再加一个参数,如下

this.$ajaxPlus(method, url, data, res =>{
    //success call back code
},{
    //catch是ajax请求失败后 要执行的代码
    //finallyCb是ajax请求结束后 要执行的代码,无论成功或者失败
    catchCb:()=>{//code}    
    finallyCb:()=>{//code}
})

以上catchCbfinallyCb几乎很少会用

ajax-plus中给vue全局mixin了一个loading变量,会在ajax请求结束后自动置为false,这个变量,你可以做一些ui层,比如按钮的防止高频功能


Vue.mixin({
    data () {
      return {
        loading: false
      }
    }
  })

如果你还要做其它相关操作 可以写在finallyCb中.

比如

```<el-button :loading="loading1" @click="handleSubmit">按钮1</el-button> ```

handleSubmit(){
    this.$ajaxPlus('post','/submit',{foo:1, bar:2}, res=&gt;{
        alert('提交成功了')
    },{
        catchCb:()=&gt;{
            alert('提交失败了')
        },    
        finallyCb:()=&gt;{
            //按钮置为可点击状态
            this.loading1 = false;
        }
    })
}

$ajax

也可以通过 this.$axios 来使用 axios 所有的 api 方法,如下:


this.$ajax.get(url, data).then(res =&gt;{
  //拿到res了
})

this.$ajax.post(url, data).then( res =&gt;{
  //拿到res了
})

try {
  const data = await this.$ajax.post(url, data)
} catch (error) {
  
}

由于前后端约定不一致,关于callback的更深层的处理并没有完善。

axiosroutervuex结合起来才能更强大,比如拦截器中根据status判断是否登陆,用户的鉴权可以和store结合,response的相关报错和相关ui的Diag、Message结合会更棒.

个人笔记

更多使用方式以及改写, 参考源码, 欢迎提意见。

来源:https://segmentfault.com/a/1190000016802727
相关标签: axios

上一篇: MySQL 事务下

下一篇: axios