在VueJS 中,我将每个路由上的加载器显示为:router.beforeEach((to, from, next) => { store.commit('loading', true); next();})但是如果服务器在不到一秒的时间内加载页面,那么显示这个请求的加载器看起来很奇怪,只有一秒。我想等一段时间让我说 2 秒或 3 秒,毕竟,如果页面尚未加载,则显示加载程序,否则不会。所以为此,我提出setTimeout:router.beforeEach((to, from, next) => { setTimeout(() => { store.commit('loading', true); }, 500); next();})现在加载器总是显示永远不会然后我也尝试将next()语句移动到setTimeout但是页面首先等待500 mili-sec然后加载器显示然后突然隐藏并加载页面。我想以更好的方式制作它,有什么建议吗?
2 回答

红颜莎娜
TA贡献1842条经验 获得超12个赞
我认为您不了解 Vue Router Navigation Guards。根据Vue Router Docs:
每当触发导航时,按创建顺序调用全局 before 守卫。Guards 可能会被异步解析,并且在所有钩子被解析之前导航被认为是挂起的。
简而言之,只需在beforeEach
您正在执行的操作中显示加载程序:
store.commit('loading', true);
并将其隐藏afterEach
为:
store.commit('loading', false);
就是这样。
不要加
setTimeout
进去afterEach
。
希望它会有所帮助。
添加回答
举报
0/150
提交
取消