我想从网址中删除主题标签(#),但我还需要保存无重新加载模式。我能这样做吗?
我有:page.com/#/home
我想:page.com/home
我试过了mode: 'history'
,但页面重新加载了它。
UPD:是否可以在没有页面重新加载和普通URL的情况下创建SPA应用程序?
答案 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