当前位置:首页 > VUE

vue请求实现进度条

2026-01-12 08:10:59VUE

实现请求进度条的方法

在Vue中实现请求进度条可以通过多种方式完成,常见的有使用axios拦截器和第三方库如NProgress。以下是具体实现方法:

使用axios拦截器配合NProgress

安装NProgress库:

npm install nprogress

在Vue项目中配置axios拦截器:

import axios from 'axios';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

axios.interceptors.request.use(config => {
  NProgress.start();
  return config;
});

axios.interceptors.response.use(response => {
  NProgress.done();
  return response;
}, error => {
  NProgress.done();
  return Promise.reject(error);
});

自定义进度条组件

创建自定义进度条组件:

<template>
  <div class="progress-bar" :style="{ width: progress + '%' }"></div>
</template>

<script>
export default {
  data() {
    return {
      progress: 0
    };
  },
  methods: {
    start() {
      this.progress = 0;
      const interval = setInterval(() => {
        this.progress += 10;
        if (this.progress >= 100) {
          clearInterval(interval);
        }
      }, 300);
    },
    finish() {
      this.progress = 100;
      setTimeout(() => {
        this.progress = 0;
      }, 500);
    }
  }
};
</script>

<style>
.progress-bar {
  height: 3px;
  background-color: #42b983;
  transition: width 0.3s ease;
}
</style>

在main.js中全局注册:

import ProgressBar from './components/ProgressBar.vue';

const progress = new Vue(ProgressBar).$mount();
document.body.appendChild(progress.$el);

Vue.prototype.$progress = {
  start: progress.start,
  finish: progress.finish
};

使用vue-router的导航守卫

结合vue-router实现页面切换时的进度条:

import NProgress from 'nprogress';

router.beforeEach((to, from, next) => {
  NProgress.start();
  next();
});

router.afterEach(() => {
  NProgress.done();
});

注意事项

进度条样式可以通过CSS自定义,NProgress默认提供蓝色进度条,可以通过修改CSS文件更改颜色和样式。

对于文件上传等长时间请求,需要在上传方法中手动控制进度:

axios.post('/upload', formData, {
  onUploadProgress: progressEvent => {
    const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);
    this.$progress.progress = percent;
  }
})

以上方法可以根据项目需求选择使用,NProgress方案较为成熟,自定义组件则更加灵活。

vue请求实现进度条

标签: 进度条vue
分享给朋友:

相关文章

vue实现倒计时

vue实现倒计时

Vue 实现倒计时的基本方法 使用 setInterval 和响应式数据 在 Vue 组件中定义一个响应式变量(如 countdown),通过 setInterval 每秒更新数值。组件销毁时清除…

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPa…

vue实现点击页面切换

vue实现点击页面切换

实现点击页面切换功能 在Vue中实现点击页面切换功能,可以通过路由跳转或组件动态渲染两种方式完成。以下是具体实现方法: 使用Vue Router实现页面跳转 安装Vue Router后,在项目中…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现 安装…

vue实现无线滚动列表

vue实现无线滚动列表

无限滚动列表的实现方法 在Vue中实现无限滚动列表通常结合监听滚动事件和动态加载数据。以下是几种常见方法: 使用自定义指令 创建自定义指令v-infinite-scroll监听滚动事件:…