Vue的全局组件/加载/Loading/请求转圈圈组件

news/2024/7/10 1:51:28 标签: vue

Vue每次请求都要出现加载图案,这样的需求需要设置一个全局的组件,然后每次请求和请求结束都要调用这个组件的开关。这样就可以实现展示给用户看系统在请求后台的需求。
首先:
1.制作一个全局的加载组件,Loading.vue 摆放的路径请随意,以下提供两个加载,一个是用图片加载的,一个是利用vant 的ui遮罩层和Loading样式制作的。

1.1 vant ui的

<template>
<div style="margin-top: 4rem">
  <van-overlay :show="true" style="background-color: rgba(0, 0, 0, 0)">
    <van-loading class="wrapper" type="spinner" />
  </van-overlay>
  </div>
</template>

<script>
export default {
  name: 'Loading'
}
</script>

<style lang="less" scoped>
</style>

1.2 自定义用图片,附上git图片

<template>
  <div>
    <div class="modal-mask modal-transition" >
      <div class="modal-wrapper"  >
        <div class="modal-container">
         <!-- <span class="iconfont" style="font-size: 4rem;margin-left: 30%">&#xe733;</span>-->
          <img style="height: 40px;margin-left: 35%" src="static/mediaFile/loading.gif" />
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  import { Loading } from 'vux'
  export default {
    name: 'Myloading',
    components: {
      Loading
    },
    data () {
      return {
      }
    },
    methods: {
    },
    mounted () {
    }
  }
</script>

<style lang="less">
  .modal-mask{
    background-color: transparent;
    position: fixed;
    width: 100%;
    height:100%;
    top:0;
    left: 0;
    z-index: 99;
    display: table;
  }
  .modal-wrapper{
    background-color: transparent;
    display: table-cell;
    vertical-align: middle;
  }
  .modal-container{
    background-color: transparent;
    margin: auto;
    top: 50%;
    width: 300px;
    padding: 20px 30px;
  }
  .modal-header h3{
    background-color: transparent;
    margin-top: 0;
    color:#42b983;
  }
  .modal-body{
    background-color: transparent;
    margin: 20px 0;
  }
  .modal-default-button{
    background-color: transparent;
    float: right;
  }
</style>

在这里插入图片描述
2.在App.vue中引入组件
在这里插入图片描述

<template>
  <div id="app">
    <router-view></router-view>
    <myloading v-if='LOADING' style="position: fixed;z-index: 200"></myloading>
	<div style="height:3rem;"></div>
  </div>
</template>
<script>
  import {mapState} from 'vuex'
  import Myloading from './components/global/loading' //加载组件的位置
  export default {
    name: 'app',
    components: {Myloading},
    computed: {
      ...mapState([
        'LOADING'
      ])
    },
    data: function () {
      return {
  
      }
    },
    methods: {
    },
    mounted () {
    }
  }
</script>
<style  lang="less">

</style>

3.在store文件夹下的index.js中加上控制组件展示和关闭的开关

import Vue from 'vue'
import Vuex from 'vuex'
import Cookie from 'js-cookie';
Vue.use(Vuex)

const state = {
  LOADING: false
}

const mutations = {
  // 加载框
  showLoading (state) {
    state.LOADING = true
  },
  hideLoading (state) {
    state.LOADING = false
  }
  }
}
export default new Vuex.Store({
  state,
  mutations
})

4.在你用axios发送请求的拦截器上进行控制

4.1 请求时

axios.interceptors.request.use(
  config => {
    store.commit('showLoading')
    return config
  },
  error => {
    store.commit('hideLoading')
    return Promise.reject(error)
  }
)

4.2 请求返回时

axios.interceptors.response.use(
  response => {
    console.log('response:', response.data.code)
    store.commit('hideLoading')
    return response
  },
  error => {
    if (error.response) {
      console.log('response ERROR:', error.response)
      tryAgain(error)
      return Promise.reject(error.response.data)
    }
  }
)

以上操作即可实现加载组件的设置


http://www.niftyadmin.cn/n/614636.html

相关文章

Vue /javascript /JS日期时间转换工具

字符串转换成日期&#xff0c;日期转换成字符中&#xff0c;废话不说&#xff0c;上代码&#xff01; //日/月/年 export function stringToDate (dateStr,separator) {if(!separator){separator"/";}var dateArr dateStr.split(separator);var day parseInt(date…

spring boot中多线程并发及利用CountDownLatch并发执行多线程

1.配置线程类 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configura…

空指针问题

什么是java空指针异常&#xff1f; 就是java本身引用为空&#xff0c;却引用了方法 1、分析下之前遇到的空指针异常案例 案例一&#xff08;1&#xff09;&#xff1a; package TestString;import java.util.*;public class TString{public static void main(String[] args…

查询工程里面的第三方库如何引入的?

1. 找寻当前的Logger是如何引入的&#xff1f; 点击Logger进入到引入的地方&#xff0c;如下&#xff1a; 根据右上角的slf4j-api可以得出结论&#xff1a;可以看到引入的地方是下面 错误解决&#xff1a;https://blog.csdn.net/langtian08/article/details/82015017?ops_requ…

Docker 创建 mongodb

1.从镜像仓库拉去镜像 docker pull mongo:latest2.查看镜像并创建容器 docker imagesdocker run -itd --name mongo -p 27017:27017 mongo --auth3.到此容器已创建,进入mongodb并设置用户 docker exec -it mongo mongo admindb.createUser({ user:myroot,pwd:123456,roles:[…

maven仓库清理

整理自&#xff0c;方便后续使用&#xff1a; https://www.cnblogs.com/hongdada/p/10113458.html

vuejs 2.x 压缩图片上存插件localResizeIMG

1.安装依赖 npm i lrz -S2 对应模块中引入&#xff1a; import lrz from lrz 3 使用函数&#xff1a; 返回结果是一个promise对象。 lrz( file, {width : 300//quality: 0.8 //自定义使用压缩方式}) .then(function(rst) {//成功时执行}).catch(function(error) {//失败时…

Java run start

转&#xff1a;Java Thread 的 run() 与 start() 的区别 - 灰色飘零 - 博客园 AtomicBoolean使用_xiaoguangtouqiang的博客-CSDN博客 Java run和start 1. 用start来启动线程&#xff0c;真正实现来多线程&#xff0c;无需等待run方法体执行完毕而继续执行下面的代码。 2. run只…