当前位置:首页 > VUE

vue 怎么实现loading

2026-02-18 09:56:21VUE

实现全局 Loading 的方法

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

使用 Vuex 管理状态

通过 Vuex 存储全局 Loading 状态,在需要时切换显示/隐藏。

// store.js
const store = new Vuex.Store({
  state: {
    isLoading: false
  },
  mutations: {
    setLoading(state, isLoading) {
      state.isLoading = isLoading
    }
  }
})
<!-- App.vue -->
<template>
  <div>
    <div v-if="$store.state.isLoading" class="loading-overlay">
      <div class="loading-spinner"></div>
    </div>
    <router-view />
  </div>
</template>

使用拦截器(Axios)

在 Axios 请求拦截器中自动控制 Loading 状态。

// http.js
import axios from 'axios'
import store from './store'

axios.interceptors.request.use(config => {
  store.commit('setLoading', true)
  return config
})

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

使用插件封装

封装一个全局 Loading 插件,通过 Vue.prototypeprovide/inject 方式调用。

// loading-plugin.js
export default {
  install(Vue) {
    Vue.prototype.$loading = {
      show() {
        // 显示 Loading
      },
      hide() {
        // 隐藏 Loading
      }
    }
  }
}

局部 Loading 的实现

在单个组件中实现 Loading 效果,可以结合 v-if 或动态类名控制。

<template>
  <div>
    <button @click="fetchData" :disabled="isLoading">
      {{ isLoading ? 'Loading...' : 'Load Data' }}
    </button>
    <div v-if="isLoading" class="loading-indicator">
      Loading...
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isLoading: false
    }
  },
  methods: {
    async fetchData() {
      this.isLoading = true
      try {
        await axios.get('/api/data')
      } finally {
        this.isLoading = false
      }
    }
  }
}
</script>

使用第三方库

常见的第三方库(如 Element UIAnt Design Vue)提供现成的 Loading 组件。

<template>
  <div>
    <el-button @click="showLoading">Show Loading</el-button>
  </div>
</template>

<script>
export default {
  methods: {
    showLoading() {
      const loading = this.$loading({
        lock: true,
        text: 'Loading',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
      })
      setTimeout(() => loading.close(), 2000)
    }
  }
}
</script>

CSS 动画优化

为 Loading 添加平滑动画提升用户体验。

.loading-spinner {
  animation: spin 1s linear infinite;
}

@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

通过以上方法,可以灵活实现全局或局部 Loading 效果,结合项目需求选择合适方案。

vue 怎么实现loading

标签: vueloading
分享给朋友:

相关文章

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model 指…

antd vue 实现

antd vue 实现

使用 Ant Design Vue 实现功能 Ant Design Vue 是基于 Vue.js 的 UI 组件库,提供了丰富的组件和设计规范。以下是一些常见功能的实现方法。 安装 Ant Desi…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue 实现回复

vue 实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及表单提交、数据绑定和列表渲染。以下是实现步骤和代码示例: 数据绑定与表单 <template> <div>…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展…