为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 相关文章推荐
javascript检测对象中是否存在某个属性判断方法小结
May 19 Javascript
jQuery把表单元素变为json对象
Nov 06 Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 Javascript
jQuery+formdata实现上传进度特效遇到的问题
Feb 24 Javascript
10道典型的JavaScript面试题
Mar 22 Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
详解package.json版本号规则
Aug 01 Javascript
JavaScript实现联动菜单特效
Jan 07 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 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
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
跟老齐学Python之做一个小游戏
2014/09/28 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
python实现简单俄罗斯方块
2020/03/13 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
成教自我鉴定
2013/10/27 职场文书
怎样写演讲稿
2014/01/04 职场文书
妇产医师自荐信
2014/01/29 职场文书
硕士生找工作求职信
2014/07/05 职场文书
语文复习计划
2015/01/19 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
Python爬取某拍短视频
2021/06/11 Python
浅谈Python魔法方法
2021/06/28 Java/Android