vue和element全局loading

http请求的代码如下:

import axios from ‘axios‘
import { Message} from ‘element-ui‘
import store from ‘../store‘ //vuex
import { getToken } from ‘@/utils/auth‘ //token

// 创建axios实例

const service = axios.create({
    //baseURL: "https://www.cnblogs.com", // api的base_url
    timeout: 5000 // 请求超时时间
})

//http request 拦截器
service.interceptors.request.use(

    config => {
      config.headers = {
        ‘Content-Type‘:‘application/x-www-form-urlencoded‘,
        ‘X-Token‘:getToken()
      }
      if(store.state.neddloding==0){ //等于0打开loading

        store.commit(‘gbfullscreenLoading‘)

      }
        store.commit(‘show‘)//每开始一次请求neddloding加一
        console.log(store.state.neddloding)

      return config;
    },
    error => {
      return Promise.reject(err);
    }
  );

//响应拦截器即异常处理
service.interceptors.response.use(response => {
    console.log(response)
    //store.commit(‘gbfullscreenLoadinga‘)
    //hide()

    return response
}, err => {
    if (err && err.response) {

      switch (err.response.status) {
        case 400:
            //console.log(‘错误请求‘)
            Message({message: ‘错误请求‘, type: ‘error‘});
          break;
        case 401:
            console.log(‘未授权,请重新登录‘)
          break;
        case 403:
          console.log(‘拒绝访问‘)
          break;
        case 404:
          console.log(‘请求错误,未找到该资源‘)
          break;
        case 405:
          console.log(‘请求方法未允许‘)
          break;
        case 408:
          console.log(‘请求超时‘)
          break;
        case 500:
          console.log(‘服务器端出错‘)
          break;
        case 501:
          console.log(‘网络未实现‘)
          break;
        case 502:
          console.log(‘网络错误‘)
          break;
        case 503:
          console.log(‘服务不可用‘)
          break;
        case 504:
          console.log(‘网络超时‘)
          break;
        case 505:
          console.log(‘http版本不支持该请求‘)
          break;
        default:
          console.log(`连接错误${err.response.status}`)
      }
    } else {
      console.log(‘连接到服务器失败‘)
    }
    return Promise.resolve(err.response)
})

var that=this;
function fromdata(type, url, data) {
    return new Promise((reslove, reject) => {
    service({
        method: type,
        url: url,
        data: data //java后台用qs转
      })
        .then(res => {
         // store.commit(‘UPDATE_LOADING‘, false); //隐藏loading
          //这里可以添加指定对应状态码的处理方式,比如登陆过期,res.data.code === ‘6666‘ 路由跳转到login
          if(res.data.code==0){
            reslove(res);
            console.log(store.state.neddloding)
              store.commit(‘hide‘) //每完成一次请求减一
            if(store.state.neddloding==0){ //等于0关闭loding
              console.log(store.state.neddloding)
              store.commit(‘gbfullscreenLoadinga‘)
            }

          }else{
              console.log(res.data.message)
              console.log(res)
            Message({message: ‘错误请求‘, type: ‘error‘});
          }
        })
        .catch(err => {
          //store.commit(‘UPDATE_LOADING‘, false); //隐藏loading
          reject(err.message);
          Message({message: ‘错误请求‘, type: ‘error‘});
          //Message.error(e.message);
        });
    });
  }

export default fromdata

store代码

import Vue from ‘vue‘
import Vuex from ‘vuex‘

Vue.use(Vuex)

var state={
    fullscreenLoading:true,//设置loading是否显示
    neddloding:0//根据是否为0来判断是否关闭loading
}

var mutations={
    gbfullscreenLoading(state){
        state.fullscreenLoading=true;//loading显示
    },
    gbfullscreenLoadinga(state){
        state.fullscreenLoading=false;//loading关闭
    },
    show(state){//每请求一次加一
        state.neddloding++
    },
    hide(state){//每完成请求一次减一
        state.neddloding--
    }

}

export default new Vuex.Store({
    state,
    mutations
})

app.vue中设置loading

<template>
    <div id="app" v-loading.fullscreen.lock="fullscreenLoading">
        <router-view></router-view>
    </div>
</template>
<script>
export default {

    computed:{
        fullscreenLoading(){
            return this.$store.state.fullscreenLoading
        }
    }
}
</script>

原文地址:https://www.cnblogs.com/aSnow/p/10549313.html

时间: 2024-10-04 08:52:09

vue和element全局loading的相关文章

vue axios+element 全局的loading

当发请求时,为了防止用户误操作.所以需要添加loading遮罩层. 基于vue+element_axios.用element-ui 的loading 如果想用iview的或者mint-ui 请自行更换. 在main.js中添加axios请求拦截器 import Vue from 'vue' import axios from 'axios'Vue.prototype.$http = axios; import ElementUI from 'element-ui'Vue.use(ElementU

Vue自定义插件(组件)Loading

vue.use()方法可以用来注册组件或者插件. 只要传入一个install()方法既可以注册 install(Vue,option){} 可以通过几种方式来自定义开发 Vue.$loading = -//直接挂载在Vue类上 Vue.propertype.$loading = -//直接挂载在Vue原型链上,可以通过this.$loading调用 Vue.component()//注册一个全局组件 Vue.directive()//注册全局指令 Vue.mixin()//全局混入,可以理解为继

net MVC +Vue.js+Element UI 笔记

最近项目需求要用到Vue 与 Element UI.但是又不想用Node.js.就结合了Net.MVC来做项目开发.故而做个笔记来记录一些遇到的问题和处理思路 用到MVC主要考虑是到 对 Node.js 不是特别了解.不想给自己埋坑. 而且基于MVC的话,能用到MVC的服务器端渲染,Session,验证,路由机制等等还是非常和嗨皮的. 然而集合MVC的话,比较烦的是在做可复用Component和JS文件的封装上没Node.js那么方便. Note:不得不吐槽,Vue.js简直和Flash Fle

关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有: 1.使用此方法前检查prop一定必须要写在<el-form-item>上面,写在里面的input上或者其他任何地方都不行(el-form-item prop属性绑定) 2.el-form rules,model属性绑定,ref标识 自定义表单验证的坑: 一.valid

Vue. 之 Element table 高度自适应

Vue. 之 Element table 高度自适应 使用vue创建table后,其高度自适应浏览器高度. 在创建的 el-table 中添加:height属性,其值为一个变量(tableHeight) 1 <el-table 2 :data="tableData" 3 :height="tableHeight" 4 border 5 style="width: 100%"> 在script中的data() 中添加高度的定义: 这里的

Vue. 之 Element dialog 拖拽

Vue. 之 Element dialog 拖拽 默认情况下,在使用Element的Dialog模块时,弹出框是不能移动的,且 一旦点击遮罩层区域,弹框就会消失. 解决方案: 1 在 utils 中新建 directives.js 文件 import Vue from 'vue' // v-dialogDrag: 弹窗拖拽 Vue.directive('dialogDrag', { bind(el, binding, vnode, oldVnode) { const dialogHeaderEl

Vue框架Element UI教程(二)

原文:https://www.jianshu.com/p/1704b5935a8 [时间选择器] Element UI手册:https://cloud.tencent.com/developer/doc/1270 中文文档:http://element-cn.eleme.io/#/zh-CN github地址:https://github.com/ElemeFE/element 前一篇已经安装好了Element UI环境,现在开始来实际操作框架提供的一些组件的运用了. 在准备好以下文章里面的内容

vue请求前的loading动画效果

参考: https://www.jianshu.com/p/304c665478b8 https://biigpongsatorn.github.io/#/vue-element-loading 1.安装 npm install vue-element-loading --save 2.使用vuex控制active(是否开启loading) // 用于控制是否显示加载动画 // 参考自https://www.jianshu.com/p/304c665478b8 const state = { c

vue学习--自定义全局vue组件

文档目录: |--components |-loading(组件文件夹) |-loading.vue (loading组件核心) |-index.js //配置导出组件,并且install 主要配置到处文件index.js 代码 import LoadingComponent from './loading.vue'  //引用组件文件 //定义并注册组件 const Loading = {    install: function(Vue) {        Vue.component('Lo