为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中的this变量的使用介绍
Oct 21 Javascript
Javascript实现滚动图片新闻的实例代码
Nov 27 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
浅谈Javascript数组索引
Jul 29 Javascript
js中获取时间new Date()的全面介绍
Jun 20 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
Jun 20 Javascript
Vue单文件组件的如何使用方式介绍
Jul 28 Javascript
浅谈关于angularJs中使用$.ajax的注意点
Aug 12 Javascript
vue项目刷新当前页面的三种方法
Dec 04 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
JavaScript编写开发动态时钟
Jul 29 Javascript
js中Map和Set的用法及区别实例详解
Feb 15 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
php-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
php 正则 过滤html 的超链接
2009/06/02 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
详解用python计算阶乘的几种方法
2019/08/14 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python上selenium的弹框操作实现
2020/07/13 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
Web前端绘制0.5像素的几种方法
2017/08/11 HTML / CSS
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
优秀的自荐信要注意哪些
2014/01/03 职场文书
写给女朋友的道歉信
2014/01/08 职场文书
初婚未育未抱养证明
2014/01/12 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
《开国大典》教学反思
2014/04/19 职场文书
免职证明样本
2014/10/23 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
2014年图书室工作总结
2014/12/09 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书