当前位置:首页 > VUE

Vue全局loading实现

2026-02-17 22:06:50VUE

Vue全局Loading的实现方法

在Vue项目中实现全局Loading效果,可以通过以下几种方式:

使用Vue插件封装全局组件

创建一个Loading组件并注册为全局组件,通过Vue.prototype或provide/inject实现全局调用。

Vue全局loading实现

// Loading.vue组件
<template>
  <div v-if="visible" class="loading-overlay">
    <div class="loading-spinner"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      visible: false
    }
  },
  methods: {
    show() {
      this.visible = true
    },
    hide() {
      this.visible = false
    }
  }
}
</script>
// main.js注册全局方法
import Loading from '@/components/Loading'
const loading = {
  install(Vue) {
    const tpl = Vue.extend(Loading)
    const instance = new tpl().$mount()
    document.body.appendChild(instance.$el)

    Vue.prototype.$loading = {
      show: () => instance.show(),
      hide: () => instance.hide()
    }
  }
}
Vue.use(loading)

结合Vuex状态管理

通过Vuex集中管理Loading状态,实现组件间共享。

Vue全局loading实现

// store.js
export default new Vuex.Store({
  state: {
    loading: false
  },
  mutations: {
    SET_LOADING(state, payload) {
      state.loading = payload
    }
  }
})
// 在组件中使用
this.$store.commit('SET_LOADING', true)

使用axios拦截器实现请求Loading

在请求拦截器中自动显示Loading,响应拦截器中隐藏。

// http.js
axios.interceptors.request.use(config => {
  store.commit('SET_LOADING', true)
  return config
})

axios.interceptors.response.use(response => {
  store.commit('SET_LOADING', false)
  return response
}, error => {
  store.commit('SET_LOADING', false)
  return Promise.reject(error)
})

使用第三方库

如v-loading、Element UI的Loading服务等。

// Element UI示例
import { Loading } from 'element-ui'

let loadingInstance = Loading.service(options)
loadingInstance.close()

实现注意事项

  • 考虑多次请求时的Loading状态管理
  • 添加防抖处理避免频繁闪烁
  • 提供自定义样式和文案的能力
  • 在SSR环境下需要考虑服务端渲染兼容性

以上方法可根据项目需求选择或组合使用,插件化方案适合中小型项目,Vuex方案适合状态复杂的大型应用。

标签: 全局Vue
分享给朋友:

相关文章

Vue中实现路由

Vue中实现路由

Vue 路由的实现方法 在 Vue 中实现路由通常使用 Vue Router 库。以下是具体的实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router: n…

vue全局指令实现

vue全局指令实现

Vue 全局指令的实现 在 Vue 中,全局指令可以通过 Vue.directive() 方法注册,这些指令可以在任何组件的模板中使用。 注册全局指令 全局指令需要在 Vue 应用初始化之前注册,通…

Vue实现打印贴纸

Vue实现打印贴纸

Vue实现打印贴纸的方法 在Vue中实现打印贴纸功能,通常需要结合HTML模板、CSS样式和JavaScript打印API。以下是几种常见的方法: 使用window.print()方法 创建一个专…

Vue实现首次登录弹窗

Vue实现首次登录弹窗

Vue实现首次登录弹窗的方法 使用本地存储(localStorage)记录登录状态 在用户首次登录时,通过检查localStorage中是否存在特定标记来判断是否需要显示弹窗。如果标记不存在,则显示…

vue如何实现全局搜索

vue如何实现全局搜索

实现全局搜索的方法 在Vue中实现全局搜索功能可以通过多种方式完成,具体取决于项目的需求和架构。以下是几种常见的方法: 使用Vuex进行状态管理 创建一个全局搜索的Vuex模块,存储搜索关键词和搜…

react如何管理全局参数

react如何管理全局参数

使用Context API管理全局参数 Context API是React内置的全局状态管理方案,适合跨组件共享数据。通过React.createContext创建上下文,配合Provider和use…