element-ui全局添加loading效果

这篇具有很好参考价值的文章主要介绍了element-ui全局添加loading效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在我们的平时的工作中,在前后端交互的时候,为了提高页面的观赏性和用户的体验,我们会在页面上添加loading来阻止用户操作来等待接口的返回,这个时候我们会考虑到全局loading还是局部loading。

需要用到的第三方插件

$ npm i element-ui -S
$ npm i lodash -S
$ npm i axios -S

首先我们需要引入element-ui的Loading组件,这个组件有两种调用方式:

1、通过指v-loading

2、通过服务Loading.service();

我们一般是在请求和响应拦截器中添加loading效果,完整代码如下:

首先基于element-ui进行loading二次封装组件

import { Loading } from "element-ui";
import _ from 'lodash';

let loading = null;
let needRequestCount = 0;


//开启loading状态
const startLoading = (headers={}) => {
  loading = Loading.service({
    lock: true,   //是否锁定屏幕的滚动
    text: headers.text||"加载中……",  //loading下面的文字
    background: "rgba(0, 0, 0, 0.7)",  //loading的背景色
    target:headers.target||"body"      //loading显示在容器
  });
};

//关闭loading状态
//在关闭loading为了防止loading的闪动,采用防抖的方法,防抖计时一般采用300-600ms
//在关闭loading之后,我们需注意全局变量导致的V8垃圾回收机制,把没用的变量清空为null
const endLoading = _.debounce(() => {
  loading.close();
  loading = null;
},300);


export const showScreenLoading=(headers)=>{
   if(needRequestCount == 0&&!loading){
    startLoading(headers);
   }
   needRequestCount++;
}

export const hideScreenLoading=()=>{
    if(needRequestCount<=0)  return 
    needRequestCount--;
    needRequestCount = Math.max(needRequestCount, 0);
    if(needRequestCount===0){
        endLoading()
    }
}
export default {};

将上面封装的组件引入到utils->request文件中文章来源地址https://www.toymoban.com/news/detail-509457.html

import axios from "axios";
import Lockr from "lockr";
import { showScreenLoading, hideScreenLoading } from "./loading";
import { Message } from "element-ui";

class Service {
  construct() {
    this.baseURL = process.env.VUE_APP_URL;
    this.timeout = 3000; //请求时间
  }
  request(config) {
    let instance = axios.create({
      baseURL: this.baseURL,
      timeout: this.timeout
    });
    //请求拦截器
    instance.interceptors.request.use(
      config => {
        config.headers.Authorization = Lockr.get("token");
        if (config.headers.showLoading !== false) {
          showScreenLoading(config.headers);
        }
        return config;
      },
      error => {
        if (config.headers.showLoading !== false) {
          hideScreenLoading(config.headers);
        }
        Message.error("请求超时!");
        return Promise.reject(error);
      }
    );
    //响应拦截器
    instance.interceptors.response.use(
      response => {
        if (response.status == 200) {
          setTimeout(() => {
            if (response.config.headers.showLoading !== false) {
              hideScreenLoading();
            }
          }, 500);
          return response.data;
        }
      },
      error => {
        if (response.config.headers.showLoading !== false) {
          hideScreenLoading();
        }
        return Promise.reject(error);
      }
    );
    return instance(config);
  }
}

export default new Service();

到了这里,关于element-ui全局添加loading效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 引入element-ui步骤(按需引入和全局引入)

    两种引入方式 1)完整引入 2)按需引入 借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。 a)先安装 babel-plugin-component: b)修改 babel.config.js 的内容 c)创建文件 element.js(名字自定义) d)最后在main.js中添加代码

    2024年02月16日
    浏览(38)
  • element-ui 表格添加校验

      html片段     js片段 css片段

    2024年02月15日
    浏览(37)
  • element-ui,使用message防止多次提示,全局配置可关闭提示

    情景:在我们使用message的时候每次操作成功,或者进行一些数据交互的时候会进行message提示,但是假如出现我们操作完成要异步继续进行其他操作,或者多次调用接口时这个时候一直提示对用户是很不友好的,我们只需要让他提示最后一次即可; 1:在untils文件夹下创建  o

    2024年02月16日
    浏览(37)
  • Vue3+element-ui + TS封装全局分页组件

    本文介绍了如何使用Vue3、element-ui和TypeScript封装一个全局分页组件。 在开始之前,你需要安装以下环境: Vue3 element-ui TypeScript 这个分页组件提供以下功能: 支持自定义每页显示条数 支持自定义跳转到指定页码 支持显示总页数和总条数 支持自定义样式 分页组件结构 分页组

    2024年02月12日
    浏览(51)
  • Vue使用Element-UI实现分页效果

    分页在展示数据列表的场景肯定是非常多的。 一般的项目开发中,数据量特别大,一般都是后端接口直接处理分页返回,前端直接调用即可。 但是前端也是可以不需要借助后端,自己也是可以处理分页的。今天我这个后端开发就站在前端的角度上,处理列表分页。 友情提示

    2024年02月02日
    浏览(37)
  • element-ui表单动态添加必填校验

    业务场景:根据form表单中的某些下拉框选中值,动态切换一些属性的必填校验。 效果图: 当活动区域非必填时,活动名称取消必填校验,否则活动名称必填。

    2024年02月11日
    浏览(35)
  • 给 element-ui 表格的表头添加icon图标

    el-table icon图标 的设置,使用  slot=\\\"header\\\"  插槽,然后直接通过设置类名为  el-icon-iconName  来使用即可。 效果展示:

    2024年02月16日
    浏览(35)
  • 前端项目review之修改element-ui全局主题颜色配置element-theme-chalk和gulp

    每个公司的主题风格肯定是不一样的,比如现在的公司主题就是#00ab7a。在PC端TO-B的项目中少不了用 element-ui ,这个时候用 element-theme-chalk 直接本地编译修改了element全局的主题色。 执行 当只有一个主题不需要切换的时候,使用 element-theme-chalk 就足够了,但是当主题很多的时候

    2023年04月09日
    浏览(27)
  • element-ui添加动态表格并合计行合并行操作

    项目开发过程中,我们有时候会遇到表格里面数据进行动态添加修改删除的操作,表格里面我们也会经常遇到合并单元格和合计累加计算行的数据。这里我们就简单的记录一下实际场景的运用! 最终实现的效果图如下: 注意:这里的新增操作人不能重复添加,新增的时候有

    2024年02月11日
    浏览(52)
  • element-ui的el-form表单一行两个显示效果

    效果图:           代码: 因为代码重复所以这些只写了一份   css设置这些就ok了 

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包