为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+ajax请求data显示在GridView上(asp.net)
Aug 27 Javascript
JQueryEasyUI datagrid框架的进阶使用
Apr 08 Javascript
javascript浏览器兼容教程之事件处理
Jun 09 Javascript
JQuery 在线引用及测试引用是否成功
Jun 24 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
jquery获取css的color值返回RGB的方法
Dec 18 Javascript
String字符串截取的四种方式总结
Nov 28 Javascript
浅谈pc端rem字体设置的问题
Aug 03 Javascript
在Vue组件上动态添加和删除属性方法
Feb 23 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
JavaScript实现捕获鼠标坐标
Apr 12 Javascript
JS实现九宫格拼图游戏
Jun 28 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项目开发中用到的快速排序算法分析
2016/06/25 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JS中操作JSON总结
2020/12/06 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python读取Android permission文件
2013/11/01 Python
Python中asyncore的用法实例
2014/09/29 Python
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
理解Python垃圾回收机制
2016/02/12 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
基于python实现复制文件并重命名
2020/09/16 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
一套SQL笔试题
2016/08/14 面试题
销售业务员岗位职责
2014/01/29 职场文书
创业计划书模版
2014/02/05 职场文书
开学典礼策划方案
2014/05/28 职场文书
单位消防安全责任书
2014/07/23 职场文书
安全责任书范文
2014/08/25 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
离婚纠纷代理词
2015/05/23 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
python数字图像处理之图像的批量处理
2022/06/28 Python