我看了demo里isLoading的实现方式,是通过router的beforeEach设置vuex全局变量isLoading为true和afterEach设置vuex全局变量isLoading为false实现的。
router.afterEach(function(to) {
console.log('>>> afterEach');
store.commit('updateLoadingStatus', { isLoading: false });
});
但是在我的实际项目中,每个页面会在created里异步获取一些数据,这就导致数据还没获取完,但是路由导航已经执行afterEach了,把还未载入数据的页面给显示了,效果就是数据一闪地出现
我不确定我理解的有没有问题,但是我通过调试输出看顺序是这样子的。我想请问是不是应该把commit的步骤改到每次数据加载完的.then里?但是这样又会需要每个页面都写一遍,不知道有没有更好的解决方案?
谢谢~
1.要把 commit 放到数据获取完。
2.更简单一点,你不应该在 created 里获取数据,而应该在 beforeRouteEnter 里获取,理论上经过这个 hook 才会触发 afterEach
Most helpful comment
1.要把 commit 放到数据获取完。
2.更简单一点,你不应该在 created 里获取数据,而应该在 beforeRouteEnter 里获取,理论上经过这个 hook 才会触发 afterEach