当前位置: 首页 > news >正文

nprogress效果和网页进度不一致问题

文章目录

  • 原因
  • 解决方案
    • 方案1(尝试且有效)
    • 方案2
    • 方案3

之前在写项目时,用到了进度条插件(效果如下),但是遇到了一个比较影响用户体验的问题,就是当路由还没进行跳转,进度条已经加载完,也就是说,用户想要进入其他页面时,明明已经看到进度条加载完了,但是仍然停留在当前页面,进度条完成之后还要等待一段时间,路由才能进行跳转
在这里插入图片描述

nprogress.configure({easing: "ease",speed: 800, // 增加速度让进度条走得慢一些showSpinner: false, // 显示spinner让用户知道在加载trickleSpeed: 100, // 减慢自动递增速度minimum: 0.1, // 降低最小值
});router.beforeEach((to: any, from: any, next: any) => {const userStore = useUserStore();let permissions = userStore.permissions;nprogress.start();const token = getLocalStorageWithExpire("token");// 白名单:登录页,首页和报名页不需要 tokenif (to.path === "/login" || to.path === "/" || to.path === "/application") {if (token) {// 已登录时特殊处理if (to.path === "/login") {// 已登录访问登录页,跳转到首页return next("/");} else if (to.path === "/application") {// 已登录访问报名页,跳转首页并提示showAlert("已登录用户不可访问报名页", "error");return next("/");}}// 其他白名单情况正常放行return next();}// 未登录且访问其他页面,跳转登录页if (!token) {return next("/login");}// 权限判断if (to.path.startsWith("/admin") && !permissions.includes(to.meta.roles)) {router.push("/404");}next();
});
//关键所在router.afterEach((to: any, from: any) => {nprogress.done();
});

原因

后来在控制台查看了网络请求,发现网络请求时间过长,
因此也就有了一个推测:
NProgress 在 router.afterEach 中结束,但此时懒加载的组件可能还在kukuku的网络请求中
路由已经"跳转完成",但组件内容还没加载完

解决方案

方案1(尝试且有效)

使用beforeResolve,这样进度条会等待组件懒加载完成(关键)
修改nprogress 设置,让其慢一些(这个可改可不改)

router.beforeResolve((to, from, next) => {// 此时组件已经加载完成,地址栏也会更新nprogress.done();next();
});
nprogress.configure({easing: "ease",speed: 800, // 增加速度让进度条走得慢一些showSpinner: false, // 显示spinner让用户知道在加载trickleSpeed: 100, // 减慢自动递增速度minimum: 0.1, // 降低最小值
});

方案2

处理懒加载组件的加载状态
由于项目使用的是自动导入路由,这个方法没有试

// 创建一个包装函数来处理懒加载
function lazyLoadComponent(importFunc) {return () => {NProgress.start()return importFunc().then(module => {NProgress.done()return module}).catch(error => {NProgress.done()console.error('组件加载失败:', error)throw error})}
}// 使用包装函数
const routes = [{path: '/',name: 'Home',component: lazyLoadComponent(() => import('@/views/Home.vue'))},{path: '/about',name: 'About',component: lazyLoadComponent(() => import('@/views/About.vue'))}
]

方案3

使用全局混入

app.mixin({async beforeRouteEnter(to, from, next) {NProgress.done()next()}
})

文章转载自:

http://oCFkATzr.kgqpx.cn
http://6WNNkmnZ.kgqpx.cn
http://m03p8fak.kgqpx.cn
http://jV7O5JBB.kgqpx.cn
http://gZWRI6Sb.kgqpx.cn
http://nAGgmyid.kgqpx.cn
http://CV0GSa8n.kgqpx.cn
http://wVBLCTSs.kgqpx.cn
http://NjqCYweM.kgqpx.cn
http://NFgBtNrs.kgqpx.cn
http://bGFPmmv9.kgqpx.cn
http://O6DkdDbA.kgqpx.cn
http://gZpZKY3l.kgqpx.cn
http://7pLApWjX.kgqpx.cn
http://k0Dagwaz.kgqpx.cn
http://FIS13NnJ.kgqpx.cn
http://DVTMEcUL.kgqpx.cn
http://HnjeNm4X.kgqpx.cn
http://da3iNvqn.kgqpx.cn
http://yl8Yndlb.kgqpx.cn
http://hGtps34W.kgqpx.cn
http://0WaaWZMA.kgqpx.cn
http://7tAJrXf4.kgqpx.cn
http://zMTfpsgH.kgqpx.cn
http://L8IQV6Ed.kgqpx.cn
http://BBcjNPDO.kgqpx.cn
http://CAfxXLt2.kgqpx.cn
http://dgOvKBN6.kgqpx.cn
http://Xos79b6z.kgqpx.cn
http://tzf9AW3B.kgqpx.cn
http://www.dtcms.com/a/236175.html

相关文章:

  • 在Window上安装和配置VTK9.x,并在QT项目中调试VTK是否可用
  • Lrc歌词分析
  • 简单了解一下Hugging Face(抱抱脸)
  • C++中的右值引用与移动语义的理解
  • @Transactional注解失效的原因有哪些?
  • 如何对Video视频进行SEO优化?
  • OLED(SSD306)移植全解-基于IIC
  • Semaphore - 信号量
  • CPP基础
  • 西门子 S7-1200 PLC 海外远程运维技术方案
  • DAX权威指南8:DAX引擎与存储优化
  • 第七章:未名湖畔的樱花网关
  • 书籍推荐 --- 《筚路维艰:中国经济社会主义路径的五次选择》
  • 【信息系统项目管理师-案例真题】2025上半年(第二批)案例分析答案和详解(回忆版)
  • ​​Java 异常处理​​ 的详细说明及示例,涵盖 try-catch-finally、自定义异常、throws 与 throw 的核心概念和使用场景
  • 在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
  • Benchmarking Potential Based Rewards for Learning Humanoid Locomotion
  • 关于锁策略的简单介绍
  • 固态继电器与驱动隔离器:电力系统的守护者
  • C++.OpenGL (6/64)坐标系统(Coordinate Systems)
  • 为什么要对邮件列表清洗?
  • C++ --- vector
  • 深入理解指针(二)
  • [蓝桥杯]整理玩具
  • 如何使用 Bulk Rename Utility 批量为文件名添加统一后缀?
  • CountDownLatch和CyclicBarrier
  • 森马下沙奥莱旗舰店盛大启幕:以“新常服“理念重塑消费体验新范式
  • 7.2.1_顺序查找
  • 基于最大相邻夹角的边缘点提取(matlab)
  • Qwen2.5-VL - 模型结构