需求来源:当使用React时,使用 umi loading 很方便,页面对http请求发生改变时,也会自动改变loading的相关状态(true/false)

对VUE插件进行找寻,发现没找到合适内容,就参考思路自行设计了一套

功能实现

界面Loading自动加载,不需要在每个请求前后进行拦截,且配置简单、实现方便,如图:

技术栈

vue、vuex、axios(http请求)


开始实现

第一步,文件目录结构介绍:

  lib/http: Http封装,对系统请求进行封装

  service/api.js: 请求接口提取(统一管理请求URL,详细内容见右)

  store.js: 全局状态

第二步,接口统一提取(service/api.js)

  如上是提取的统一URL内容,使用时直接引入

第三步,全局状态封装(store.js)

 import Vue from "vue";
import Vuex from "vuex";
import * as Service from '@/service/api'; Vue.use(Vuex); // 实现自动注册loading URl
const loading = {};
Object.values(Service.URLS).forEach(value => {
loading[value] = false;
}); export default new Vuex.Store({
state: {
// url请求列表,自动注册
loading: loading
},
mutations: {
loading(state, url) {
state.loading[url] = true;
},
unloading(state, url) {
state.loading[url] = false;
}
},
actions: {}
});

第四步,Http封装

 import axios from 'axios';
import store from '../../store' /**
* 设置请求前缀(末尾必须包含 / 否则会导致动态loading失败)
*/
axios.defaults.baseURL = "http://www.huic.top/"; /**
* 定义一个请求拦截器(Loading设置true)
*/
axios.interceptors.request.use(function (config) {
store.commit("loading", config.url);
return config
});
/**
* 定义一个响应拦截器(Loading设置为false)
*/
axios.interceptors.response.use(function (response) {
store.commit("unloading", response.config.url.replace(axios.defaults.baseURL, ""));
return response
});

这里的封装只封装了拦截器,并未对具体请求进行封装,因为请求封装在这里可有可无,如需要的请留一下邮箱

第五步,使用

 <script>
import './index.less';
import * as Service from '@/service/api'; export default {
data: () => ({
// 题目标签
tags: [],
}),
computed: {
tagLoading() {
return this.$store.state.loading[Service.URLS.ARTICLE_TAG_LEVEL];
},
testLoading() {
return this.$store.state.loading[Service.URLS.ARTICLE_TEST];
}
},
created() {
this.queryTags();
},
components: {
},
methods: {
/**
* 查询标签列表(请求封装查询,也可直接使用 axios.post 等内容)
*/
queryTags() {
Service.articleTagLevel({}).then(res => {
if (res.isOk()) {
this.tags = res.data.records;
}
});
}
}
};
</script>

以上代码为VUE简单使用,则将loading - url - 组件进行绑定,则代表在本页面进行请求,例如:articleTagLevel,则会自动绑定loading(见12行)

以上核心代码为10-17行,代表将url和loading属性绑定,使用方法见下:

 <div class="test-body-item">
<Row>
<Col span="2" class="test-body-item-title">
标签选择
</Col>
<Col span="21" offset="1">
<TagGroup :data="tags" :loading="tagLoading"/>
</Col>
</Row>
</div>

使用方法:第 7 行,其中 :loading="tagLoading" 则代表将tagLoading属性绑定到loading参数中

至此,实现成功.

End.

VUE动态(自动)Loading【绑定到URL】,同页面多个Loading互不冲突的更多相关文章

  1. Vue动态添加v-model绑定及获取其返回数据

    从数据库拿到的动态数据绑定到页面对应的v-model或者v-bind上,并且根据对页的操作获取到返回的值: 1.首先在data里定义一个数据 timeTip 为一个空数组 data () { retu ...

  2. Vue动态加载异步组件

    背景: 目前我们项目都是按组件划分的,然后各个组件之间封装成产品.目前都是采用iframe直接嵌套页面.项目中我们还是会碰到一些通用的组件跟业务之间有通信,这种情况下iframe并不是最好的选择,if ...

  3. 【前端】vue.js实现输入框绑定

    vue.js实现输入框绑定 实现效果如下: 实现代码及注释 <!DOCTYPE html> <html> <head> <title>vue.js数据动 ...

  4. vue实现ajax滚动下拉加载,同时具有loading效果

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Vue动态组件

    前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动 ...

  6. Vue 框架-05-动态绑定 css 样式

    Vue 框架-05-动态绑定 css 样式 今天的小实例是关于 Vue 框架动态绑定 css 样式,这也是非常常用的一个部分 首先说一下 动态绑定,相对的大家都知道静态绑定,静态绑定的话,直接加 cl ...

  7. vue动态子组件的实现方式

    让多个组件使用同一个挂载点,并动态切换,这就是动态组件. 通过使用保留的 <component>元素,动态地绑定到它的 is 特性,可以实现动态组件. 方式一:局部注册所需组件 <d ...

  8. ZUI(BootStrap)使用vue动态插入HTMl所创建的data-toggle事件初始化方法

    用ZUI的图片浏览:lightbox 写静态html的时候是有预览效果的,使用了vue动态加载就没有效果了, 网上的说法是动态生成的没有激活事件:ZUI(BootStrap)动态插入HTMl所创建的d ...

  9. Vue的数据双向绑定和Object.defineProperty()

    Vue是前端三大框架之一,也被很多人指责抄袭,说他的两个核心功能,一个数据双向绑定,一个组件化分别抄袭angular的数据双向绑定和react的组件化思想,咱们今天就不谈这种大是大非,当然我也没到达那 ...

随机推荐

  1. c# 计算字符串和文件的MD5值的方法

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  2. Qt 5 最小构建笔记(只编译QtBase)

    只想用Qt5最基本的功能,因此只编译QtBase.也不想为了编译一个Qt装很多东西(比如非常肥的DirectX SDK) 软件清单: Visual Studio 2010 Professional w ...

  3. 判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)

    在Win7下(Vista以上的...)有时某些操作就是会让人郁闷 开启了UAC的话,得以管理员权限运行才不会出现Access is denied... 但是,程序又不是非得什么时候都用那破管理员权限的 ...

  4. 11g Oracle导出表 默认不导出数据为空的表解决

    11g oracle导出表时会默认不导出数据为空 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出.  2.设置deferred_segm ...

  5. Java逆序输出整数

    题目要求:编写方法reverseDigit,将一个整数作为参数,并反向返回该数字.例如reverseDigit(123)的值是321.同时编写程序测试此方法. 说明:10的倍数的逆序,均以实际结果为准 ...

  6. Java Collection秋招复习

    抽象类和接口的区别 我们先来看一下抽象类 * @auther draymonder */ public abstract class AbstractClassTest { private int T ...

  7. Linux实例/etc/fstab文件配置错误导致系统启动异常

    Centos 7.3系统 问题现象: 阿里云ECS升级配置后重启,SSH连接不上.登录控制台远程连接ECS,出现以下界面.  提交工单阿里云反馈:https://help.aliyun.com/kno ...

  8. HDU 1565:方格取数(1)(最大点权独立集)***

    http://acm.hdu.edu.cn/showproblem.php?pid=1565 题意:中文. 思路:一个棋盘,要使得相邻的点不能同时选,问最大和是多少,这个问题就是最大点权独立集. 可以 ...

  9. scrapy实战7爬取搜狗微信:

    爬取微信热门文章标题,内容,内容地址,微信公众号,公众号地址,发布日期等 如图 源码地址:https://github.com/huwei86/sougouweixin

  10. 修改SearchBar的取消按钮Cancel为中文

    一开始在网上看到很多方法都是循环,好吧,我也循环 创建UISearchBar的时候循环,不行 用searchBarTextDidBeginEditing事件去循环,也不行 无语了,搜索了Baidu第一 ...