如何从 vue-router URL 中删除 hashtag(#)?

How to remove hashtag(#) from vue-router URL?

我想从 url 中删除 hashtag(#),但我还需要保存无重新加载模式。我可以这样做吗?

我有:page.com/#/home 我要:page.com/home

我试过 mode: 'history',但页面会随之重新加载。
UPD:是否可以在不重新加载页面和使用普通 URL 的情况下创建 SPA 应用程序?

激活历史模式时,您需要先根据the documentation配置您的服务器。这样做的原因是,历史模式只是改变了当前页面的URL。当用户实际重新加载页面时,他会得到一个 404 错误,因为请求的 URL 实际上并不存在。重新配置服务器以始终服务于 SPA 的主要 index.html 可解决此问题。

当在 URL(无历史记录模式)中使用 # 时,浏览器会尝试导航到具有 ID 的元素,该 ID 在 # 之后给出(在同一份文件)。这是片段标识符的原始行为。因此,如果您将 link 添加到具有此类片段标识符的 HTML 中,浏览器将不会重新加载页面,但实际上会在文档中查找 ID。 vue-router 会监视此更改并将您引导至正确的路线。这就是它使用哈希的原因。如果您只是将常规 URL 添加到 HTML,浏览器的本机行为是实际导航到此页面 (hard-link)。这导致您体验到的重新加载效果。

处理这个问题的方法是,永远不要使用常规 links 在 Vue 单页应用程序中进行路由。使用标签 <router-link> 在一个页面和另一个页面之间进行路由(但仅限于 SPA 内)。这是要走的路,无论浏览器是否允许使用 # 导航而无需重新加载。这是推荐的路由标记的文档:link

您还可以通过编程方式从一条路线路由到另一条路线。为此使用 $router.push()。这是相关文档:link