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

时间:2017-12-02 21:35:13

标签: vue.js

我想从网址中删除主题标签(#),但我还需要保存无重新加载模式。我能这样做吗?

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

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

1 个答案:

答案 0 :(得分:4)

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

在URL中使用#(无历史记录模式)时,浏览器会尝试导航到具有ID的元素,该ID是在#之后(在同一文档中)。这是片段标识符的原始行为。因此,如果使用这样的片段标识符添加HTML链接,浏览器将不会重新加载页面,而是实际查找文档中的ID。 vue-router监视此更改并将您路由到正确的路由。这就是它与哈希一起使用的原因。如果您只是向HTML添加常规URL,则浏览器的本机行为是实际导航到此页面(硬链接)。这会导致您经历重新加载效果。

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

您还可以通过编程方式从一个路由路由到另一个路由。请使用$router.push()。以下是文档:link