为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 相关文章推荐
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
Jul 24 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
Oct 30 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
Dec 17 Javascript
JavaScript使用readAsDataURL读取图像文件
May 10 Javascript
Vue.js如何实现路由懒加载浅析
Aug 14 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
详解JSONObject和JSONArray区别及基本用法
Oct 25 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
Sep 21 Javascript
js中实例与对象的区别讲解
Jan 21 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 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
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
javascript基本语法分析说明
2008/06/15 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
JS左右无缝轮播功能完整实例
2019/05/16 Javascript
express框架下使用session的方法
2019/07/31 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
利用Python批量生成任意尺寸的图片
2016/08/29 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
客户服务经理岗位职责
2014/01/29 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
通信工程专业求职信
2014/06/04 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
Java实现二分搜索树的示例代码
2022/03/17 Java/Android