为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函数定义的几种区别小结
Jan 06 Javascript
window.showModalDialog()返回值的学习心得总结
Jan 07 Javascript
jQuery实现ctrl+enter(回车)提交表单
Oct 19 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
AngularJS equal比较对象实例详解
Sep 14 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
Jan 08 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
vue中轮训器的使用
Jan 27 Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
移动端JS实现拖拽两种方法解析
Oct 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
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
php跨域调用json的例子
2013/11/13 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
中年人生感言
2014/02/04 职场文书
如何写好建议书
2014/03/13 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
创业计划书之美甲店
2019/09/20 职场文书
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电