为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 相关文章推荐
json属性名为什么要双引号(个人猜测)
Jul 31 Javascript
JavaScript数据类型之基本类型和引用类型的值
Apr 01 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
Dec 13 Javascript
如何让微信小程序页面之间的通信不再变困难
Jun 03 Javascript
微信小程序实现点击卡片 翻转效果
Sep 04 Javascript
vue中进行微博分享的实例讲解
Oct 14 Javascript
JS数组方法slice()用法实例分析
Jan 18 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
Aug 11 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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
基于mysql的bbs设计(四)
2006/10/09 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
PHP写日志的实现方法
2014/11/05 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
如何利用python生成MD5并去重
2020/12/07 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
小学网上祭英烈活动总结
2014/07/05 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python