如何在vue-router路由期间展示进度条?

发布于 2022-09-02 23:23:33 字数 1124 浏览 17 评论 0

需求:
使用vue1.0、vux、vue-router,当路由切换期间,由于拉取数据的时候产生延时,为了让用户耐心地等待,打算使用progress组件告诉用户正在加载。

我的思路:
1.因为progress是全局都需要的,所以我把它放在全局组件的位置
2.当路由地址发生改变,在全局上使用router.beforeEach勾子来改变progress组件的数据:progress、show
3.组件树如下:
-RootApp
  -progress
  -View-Router(此处为Home)

我的思路遇到的问题
如果是在全局上使用router.beforeEach,我不知道如何从全局上跟progress组件进行通信进而修改它的数值。

我的代码:
main.js

/*已经导入vue、vue-router*/
import app from "./components/App"
import progress from "vux/src/components/progress"
import Home from "./Home"

var router = new VueRouter();
Vue.component("progress", progress);
router.map({
        '/': {
            component: Home
        }
});

router.beforeEach(function(transition){
        // 如何跟progress组件通讯?
        transition.next()
    })

router.start(app, "#app");

App.vue

<div id="wrapper">
    <progress :percent.sync="percent"></progress>
    <router-view></router-view>
</div>

Home.vue忽略

欢迎回答以及提出新的思路

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰火雁神 2022-09-09 23:23:33

根据 vue-router 文档,

data 切换钩子会在 activate 被断定( resolved )以及界面切换之前被调用。切换进来的组件会得到一个名为 $loadingRouteData 的元属性,其初始值为 true ,在 data 钩子函数被断定后会被赋值为 false 。这个属性可用来会切换进来的组件展示加载效果。

因此可以使用 $loadingRouteData<template> 里面进行逻辑判断,具体如下:

<div v-if="$loadingRouteData">
    <progress></progress>
</div>
<div v-if="!$loadingRouteData">
    加载后的内容
</div>

至于进度值,提供一点思路:

  • 如果只是加载文件的话,可以自行写逻辑代码去判断加载文件的完成程度。

  • 如果是 Promise 这种的话(比如 ajax 请求),进度条可以考虑跑个虚假值~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文