我正在寻找一种使用 Vue Router 处理页内锚点的聪明方法。考虑以下:
<router-link to="#app">Apply Now</router-link>
<!-- some HTML markup in between... -->
<div id="app">...</div>
文档中描述 的“滚动到锚点”行为工作正常,除了:
- 当您单击锚点时,它会将您带到
div id="app"
。现在从div
滚动回到锚点并尝试再次单击它——这次你 不会 跳到div
。事实上,锚点将保留类router-link-active
并且 URL 仍将包含散列/#app
; - 通过上述步骤,如果您刷新页面(URL 仍将包含哈希)并单击锚点,也不会发生任何事情。
从用户体验的角度来看,这是非常不幸的,因为潜在客户必须再次手动向下滚动才能到达应用程序部分。
我想知道 Vue Router 是否涵盖了这种情况。作为参考,这是我的路由器:
export default new VueRouter({
routes,
mode: 'history',
scrollBehavior(to, from, savedPosition) {
if (to.hash) {
return { selector: to.hash }
} else if (savedPosition) {
return savedPosition;
} else {
return { x: 0, y: 0 }
}
}
})
原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议
我没有在资源中找到任何东西来解决你的问题,但你可以在你的
$route.hash
组件中使用mounted
挂钩<router-view></router-view>
刷新问题。然后要解决第二次点击的问题,您可以使用
native
修饰符并绑定到您的<router-link></router-link>
。这是一个相当手动的过程,但会起作用。您可能还可以使用路由器的
afterEach
方法做一些事情,但还没有弄清楚。