router.afterEach(() => {
window.scrollTo(0, 0)
});
之前是这么写的,写在router.js里,但是实在太蠢了,页面切换的时候如果第二个页面上的数据渲染慢了点,就会让用户看到页面滚回顶部闪动一下。
后来我改成在beforeEach里加个loading,afterEach里关掉,但是又有问题,就是第二次进入某页面时就不显示loading了,有些页面的loading还会一直不关掉,不知道是为什么,有大佬知道吗,望指点。
我查了一下,找到了比较好的方法,就是用router的scrollBehavior,写法是这样:
const router = new Router({
base: '/',
routes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition && to.meta.keepAlive) {
return savedPosition;
}
return { x: 0, y: 0 };
},
});
这样就可以毫无痕迹地回到顶部,怎么才发现,太傻了。