为vue项目自动设置请求状态的配置方法


Posted in Javascript onJune 09, 2019

在进入一个页面的时候,一般在获取数据的同时,会先显示一个 loading ,等请求结束再隐藏 loading 渲染页面,只需要用一个属性去记录请求的状态,再根据这个状态去渲染页面就好了

async handler() {
  this.loading = true
  await fetch()
  this.loading = false
}

虽然是很简单的功能,可是要处理的地方多的时候,还是很繁琐的,就想着能不能统一设置处理请求的 loading ,然后页面根据 loading 的状态决定要显示的内容,就根据自己的想法做了一些封装,自动给所有 ajax 请求设置 loading 状态,主要思路是把所有请求集中到单一实例上,通过 proxy 代理属性访问,把 loading 状态提交到 store 的 state 中

安装

$ npm install vue-ajax-loading

演示

在线demo(打开较慢)

为vue项目自动设置请求状态的配置方法 

使用

配置 store 的 state 及 mutations

import { loadingState, loadingMutations } from 'vue-ajax-loading'

const store = new Vuex.Store({
  state: {
    ...loadingState
  },
  mutations: {
    ...loadingMutations
  }
})

把所有请求集中到一个对象上

import { ajaxLoading } from 'vue-ajax-loading'
import axios from 'axios'
import store from '../store' // Vuex.Store 创建的实例
axios.defaults.baseURL = 'https://cnodejs.org/api/v1'
// 把请求集中到单一对象上,如:
const service = {
  global: {
    // 全局的请求
    getTopics() {
      return axios.get('/topics')
    },
    getTopicById(id = '5433d5e4e737cbe96dcef312') {
      return axios.get(`/topic/${id}`)
    }
  },
  modules: {
    // 有命名空间的请求,命名空间就是 topic
    topic: {
      getTopics() {
        return axios.get('/topics')
      },
      getTopicById(id = '5433d5e4e737cbe96dcef312') {
        return axios.get(`/topic/${id}`)
      }
    }
  }
}

export default ajaxLoading({
  store,
  service
})

完成以上配置之后,通过上面 export default 出来的对象去发送请求,就会自动设置请求的状态,然后可以在组件内通过 this.$store.state.loading this.$loading 去访问请求状态,如:

<el-button type="primary" :loading="$loading.getTopics" @click="handler1">getTopics</el-button>
<el-button type="primary" :loading="$loading.delay" @click="delay">定时两秒</el-button>
<el-button type="primary" :loading="$loading.topic.getTopics" @click="handler3">topic.getTopics</el-button>

import api from 'path/to/api'
export default {
  methods: {
    handler1() {
      api.getTopics()
    },
    handler3() {
      api.topic.getTopics()
    },
    delay() {
      api.delay()
    }
  }
}

Options
store

Vuex.Store 创建的实例

service

包含所有请求的对象,可以配置 global 和 modules 属性

  • global:全局作用域的请求,可以设置为 对象 或 数组对象
  • modules:带命名空间的请求,类型为 对象 ,属性名即为命名空间

总结

以上所述是小编给大家介绍的为vue项目自动设置请求状态的配置方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
js 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
JavaScript开发规范要求(规范化代码)
Aug 16 Javascript
jquery 年会抽奖程序
Dec 22 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
Dec 19 Javascript
jQuery实现弹出窗口弹出div层的实例代码
Jan 09 Javascript
Vue结合原生js实现自定义组件自动生成示例
Jan 21 Javascript
webpack file-loader和url-loader的区别
Jan 15 Javascript
快速了解Node中的Stream流是什么
Feb 13 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 jQuery
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 #Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 #Javascript
详解Node.js异步处理的各种写法
Jun 09 #Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 #Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 #Javascript
微信小程序与webview交互实现支付功能
Jun 07 #Javascript
在微信小程序中使用vant的方法
Jun 07 #Javascript
You might like
php explode函数实例代码
2012/02/27 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
python实现连接mongodb的方法
2015/05/08 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
销售高级职员求职信
2013/10/29 职场文书
幼儿师范毕业生自荐信
2013/11/09 职场文书
大学生创业感言
2014/01/25 职场文书
联谊活动策划书
2014/01/26 职场文书
趣味游戏活动方案
2014/02/07 职场文书
新闻编辑求职信
2014/04/09 职场文书
《开国大典》教学反思
2014/04/19 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
人才市场接收函
2015/01/30 职场文书
自我推荐信格式模板
2015/03/24 职场文书
新年晚会开场白
2015/05/29 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书