为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 相关文章推荐
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
Web打印解决方案之普通报表打印功能
Aug 29 Javascript
js实现下拉菜单效果
Mar 01 Javascript
ES6新特性之模块Module用法详解
Apr 01 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
Jul 10 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
Nov 03 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
js实现鼠标切换图片(无定时器)
Jan 27 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
ip签名探针
2006/10/09 PHP
PHPWind 发帖回帖Api PHP版打包下载
2010/02/08 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
Python+OpenCV图像处理—— 色彩空间转换
2020/10/22 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
2013届毕业生求职信范文
2013/11/20 职场文书
参观考察邀请函范文
2014/01/29 职场文书
毕业论文评语大全
2014/04/29 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
Feign调用全局异常处理解决方案
2021/06/24 Java/Android