设置全局loading

news2024/11/19 14:35:39

为什么要设置全局loading?

在项目开发过程中,请求接口的时候延迟没有数据,页面感觉狠卡顿,这个时候就要用loading来做一个延迟界面。

但是每个界面都写loading的话就会很复杂,所以今天给大家带来了一个全局loading的文章,比较适合新手,要具备vuex的基础知识和vue中setup的使用,如果之前没有涉及的话,这边建议去看官网,网上的资料鱼龙混杂。vue的官网写的很好。

每个人都有每个人的全局loading写法。

实现效果

QQ录屏20230613102417

实现思路

loading界面书写:

loading.vue

<template>
  <div class="flex-content">
    <div class="flex-center">
      <div class="loading cube-box">
        <div class="outer-box">
          <div class="large-box">
            <div class="small-box"></div>
          </div>
        </div>
      </div>
      <div class="text">Loading...</div>
    </div>
  </div>
</template>
<style src="@/assets/css/utils/loading.css" scoped>
</style>

 loading.css

* {
  margin: 0;
  box-sizing: border-box;
}
.flex-content {
  height: 100%;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}

.flex-center:hover {
  transition: transform 0.2s ease;
  border: 1px solid #eee;
  transform: scale(1.1);
  cursor: pointer;
}
.loading{
  display: flex;
  justify-content: center;
  align-items: center;
}
.outer-box {
  width: 3em;
  height: 3em;
  animation: cube-box-ani 1s infinite ease-in-out;
  outline: 1px solid transparent;
}

.large-box {
  height: 3em;
  width: 3em;
  background-color: RGB(42,194,209);
  outline: 1px solid transparent;
}

.small-box {
  height: 3em;
  width: 3em;
  background-color: white;
  z-index: 1;
  outline: 1px solid transparent;
  animation: small-box-ani 1s alternate infinite ease-in-out;
}

@keyframes small-box-ani {
  0% {
    transform: scale(0.2);
  }
  100% {
    transform: scale(0.75);
  }
}

@keyframes cube-box-ani {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(90deg);
  }
}
.text{
  color: RGB(130,130,130);
  margin-top: 20px;
}

store设置loading:

loading.js

export default{
    state: {
        loading: false
    },
    getters: {
    },
    mutations: {
        setLoading(state,flag){
            state.loading = flag
        }
    },
    actions: {
    },
    modules: {
    }
}

store/index.js (这里配置了让vuex数据持久化vuex-persistedstate)

import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import loading from './modules/loading'

const store = createStore({
  state: {
  },
  getters: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
    loading,
  },
  /* vuex数据持久化配置 */
  plugins: [
    createPersistedState({
      // 存储方式:localStorage、sessionStorage、cookies
      storage: window.sessionStorage,
      // 存储的 key 的key值
      key: "store",
      reducer(state) { //render错误修改
        // 要存储的数据:本项目采用es6扩展运算符的方式存储了state中所有的数据
        return { ...state };
      }
    })
  ]
})
export default store;

设置全局loading.js

loading.js

// 全局loading设置
import  store  from '@/store'
let loadingNum = 0;

// 开始显示Loading
const startLoading = () => {
  loadingNum++;
  store.commit("setLoading", true);
};
// 关闭Loading
const endLoading = () => {
  loadingNum--;
  loadingNum = loadingNum < 0 ? 0 : loadingNum;
  if (!loadingNum) {
    store.commit("setLoading", false);
  }
};
// 重置函数
const resetLoading = () => {
  loadingNum = 0;
  console.log(store, "store");
  store.commit("setLoading", false);
};
// 导出
export default {
  startLoading,
  endLoading,
  resetLoading,
};

拦截器配置

请求拦截器 request.js

import axios from "axios";
import loading from "@/assets/js/utils/loading";

//1.利用axios对象的方法create,去创建一个axios实例。
const requests = axios.create({
  //配置对象
  //接口当中:路径都带有/api     基础路径,发送请求的时候,路径当中会出现api
  baseURL: "http://127.0.0.1:8080/",
  //代表请求超时的时间
  timeout: 5000,
});

//请求拦截器:
requests.interceptors.request.use((config) => {
  //解析和上传到后端的时候进行loading加载显示
  loading.startLoading();
  return config;
}),
  (error) => {
    //关闭loading
    loading.endLoading();
    return Promise.reject(error);
  };

//响应拦截器
requests.interceptors.response.use(
  (res) => {
    loading.startLoading();
    return res;
  },
  (error) => {
    loading.endLoading();
    return;
  }
);

//对外暴露
export default requests;

路由拦截器

import { createRouter, createWebHistory } from "vue-router";
import loading from "@/assets/js/utils/loading";

const routes = [
  {
    path: '/',
    name: 'main',
    component: () => import("../views/Main.vue")
  },
  {
    path: "/test",
    name: "test",
    component: () => import("../views/Test.vue"),
  },
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes,
});

router.beforeEach((to, from, next) => {
  // 重置 全局loading
  loading.resetLoading();
  next();
});

export default router;

全局loading要设置在App.vue界面。这样才能做到设置全局loading。

App.vue

<template>
  <div id="app">
    <router-view v-if="loadingState" />
    <loading v-if="!loadingState" />
  </div>
</template>
<script setup>
import loading from "@/components/utils/loading.vue";
import { computed } from "vue";
import { useStore } from "vuex";
const store = useStore();
const loadingState = computed(() => store.state.loading.loading);
</script>
<style>
* {
  padding: 0;
  margin: 0;
}
html,
body,
#app {
  width: 100%;
  height: 100%;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达471机器学习入门课程2第2周——手写数字识别(0到9)

手写数字识别的神经网络0-9 1、导包2、ReLU激活函数3 - Softmax函数4 - 神经网络4.1 问题陈述4.2 数据集4.2.1 可视化数据 4.3 模型表示批次和周期损失 (cost) 4.4 预测 使用神经网络来识别手写数字0-9。 1、导包 import numpy as np import tensorflow as tf from keras.mod…

人工智能时代已经开启,它是40年来最重大的技术革命

重读比尔盖茨关于AI的长文《The Age of AI has begun —— Artificial intelligence is as revolutionary as mobile phones and the Internet. 》&#xff08;开启AI时代&#xff1a;人工智能&#xff0c;比肩智能手机和互联网的革命&#xff09;&#xff0c;有了新的见解&…

电脑卡怎么办?4个方法让电脑流畅运行!

案例&#xff1a;我的电脑刚买的时候使用起来很流畅&#xff0c;但用久了之后就越来越卡&#xff0c;有没有办法可以让电脑流畅运行&#xff1f; 电脑是我们日常生活中必不可少的工具&#xff0c;但有时我们会遇到电脑卡顿的问题&#xff0c;这不仅会影响工作效率&#xff0c;…

VS2017 如何引入动态库(图文教程:libwebsocket为例)

目录 1、把想要的库放进适当的位置&#xff1b;&#xff08;以libwebsocket动态库为例&#xff09; 2、将库的头文件包含进来 3、添加对应的库目录 4、链接器——输入中&#xff0c;添加具体的依赖项 5、看当前的动态库&#xff0c;还会依赖其他什么动态库 1、把想要的库放进…

有了这些开源 Icon 库,妈妈再也不担心我的 UI 太丑啦!

Remix Icon Remix Icon 是一套面向设计师和开发者的开源图标库&#xff0c;所有的图标均可免费用于个人项目和商业项目。 与拼凑混搭的图标库不同&#xff0c;Remix Icon 的每一枚图标都是由设计师按照统一规范精心绘制的&#xff0c;在拥有完美像素对齐的基础上&#xff0c;…

分享两个转为数字艺术从业者服务的网站

01 地的数字艺术师、3D设计师、动画制作师和游戏开发人员等人才&#xff0c;为他们提供了多种服务和解决方案。 首先&#xff0c;NewCGer为数字艺术从业者提供了一个交流和学习的平台。该网站上有丰富的行业资讯、技术文章和研究报告等内容&#xff0c;能够及时了解到最新的数…

深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

Socket TCP/IP协议数据传输过程中的粘包和分包问题

Socket TCP/IP协议数据传输过程中的粘包和分包问题 一&#xff1a;通过图解法来描述一下分包和粘包&#xff0c;这样客户更清晰直观的了解&#xff1a; 下面对上面的图进行解释&#xff1a; 1.正常情况&#xff1a;如果Socket Client 发送的数据包&#xff0c;在Socket Server…

PowerBI 开发 第23篇:共享数据集

Power BI共享数据集的优点是&#xff1a;只要数据集刷新&#xff0c;那么引用该数据集的报表都会自动刷新&#xff0c;节省了报表数据刷新的时间和算力&#xff0c;缺点是&#xff1a;使用共享数据集的报表&#xff0c;虽然可以新增Measure(Measure仅存在于本地报表中&#xff…

The baby-bust economy “婴儿荒”经济 | 经济学人20230603版社论双语精翻

2023年6月3日《经济学人》&#xff08;The Economist&#xff09;封面文章暨社论&#xff08;Leaders&#xff09;精选&#xff1a;《“婴儿荒”经济》&#xff08;“The baby-bust economy”&#xff09;。 baby-bust即“婴儿荒”&#xff08;生育低谷&#xff09;&#xff0c…

Unity Shader Graph Ase三者分别有什么不一样的地方?

什么是Shader&#xff1f; 着色器 (Shader) 应用于计算机图形学领域&#xff0c;指一组供计算机图形资源在执行渲染任务的时使用的指令&#xff0c;用于计算机图形的颜色或明暗。但近来&#xff0c;它也能用于处理一些特殊的效果&#xff0c;或者视频后处理。通俗的说&#xf…

机器学习:基于AdaBoost算法模型对信用卡是否违约进行识别

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;…

低代码开发重要工具:jvs-form(表单引擎)2.1.7功能清单及新增功能介绍

jvs-form 2.1.7 版本功能清单 在低代码开发平台中&#xff0c;表单是用于收集和编辑数据的页面。它通常用于创建、更新或查看单个记录的详细信息。 jvs-form是jvs快速开发平台的8大引擎的其中之一&#xff0c;它的特点&#xff1a; 与动态模型联动&#xff0c;支持动态的调整…

Python心经(6)

目录 callable super type&#xff08;&#xff09;获取对应类型 isinstance判断对象是否是某个类或者子类的实例 issubclass&#xff0c;判断对象是不是类的子孙类 python3的异常处理 反射&#xff1a; 心经第三节和第五节都写了些面向对象的&#xff0c;这一节补充一…

黑苹果 或者 Mac 因 mds资源占用过高,导致频繁死机

开机后不久&#xff0c;风扇狂转&#xff0c;温度升高&#xff0c;然后死机&#xff0c;关机。 1. 使用 “Apple 诊断”测试 Mac 先看看硬件层面是否有问题。 使用“Apple 诊断”测试 Mac。 这款 Mac 的处理器是 Intel &#xff0c;开启 Mac&#xff0c;然后在 Mac 启动时立…

java的File

一、File &#xff08;一&#xff09;新建File对象 File对象表示一个路径&#xff0c;可以是文件路径&#xff0c;也可以是文件夹路径&#xff1b;这个路径可以是存在的&#xff0c;也可以是不存在的。 File类常见的构造方法&#xff1a; 例如&#xff1a; 注意&#xff1a;因…

母线差动保护(一)

与其他的主设备保护相比&#xff0c;母线保护的要求更为苛刻。当变电站母线发生故障时&#xff0c;如不及时切除故障&#xff0c;将会损坏众多电力设备&#xff0c;破坏系统的稳定性&#xff0c;甚至导致电力系统瓦解。如果母线保护拒动&#xff0c;也会造成大面积的停电。因此…

微服务外网部署灵活配置方案(不改代码适配apm和日志中心)

1.综述 之前微服务在进行部署时&#xff0c;有关日志中心和apm相关的配置都是放在代码相应的配置文件中的。 日志中心: /src/main/resources/logback-spring.xml /PIPELINE/docker/flume/hosts apm: /PIPELINE/docker/apm/apm_agent_dev.config /PIPELINE/docker/apm/ap…

TensorFlowLite 声音识别

开发 添加tensorflow的核心依赖 implementation org.tensorflow:tensorflow-lite-task-audio:0.4.0将训练模型放到main/assets文件夹下 在build.gradle中配置 因为打包时tflite文件可能会被压缩,所以需要配置如下 buildFeatures {viewBinding true}androidResources {noComp…

2023 开放原子全球开源峰会高峰论坛成功举办

6 月 11 日&#xff0c;以 “开源赋能&#xff0c;普惠未来” 为主题的 2023 开放原子全球开源峰会高峰论坛在北京成功举办。工业和信息化部相关司局、北京市经济和信息化局、北京经济技术开发区管理委员会相关领导出席并致辞。 北京市经济和信息化局副局长王磊在致辞中表示&am…