2017-12-02 416 views
0

我想从网址中删除#标签(#),但我也需要保存无重载模式。我可以那样做吗?

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

我试过mode: 'history',但它重新加载页面。
UPD:是否可以在不使用页面重新加载的情况下创建SPA应用程序并使用普通URL?如何从vue-router URL中删除hashtag(#)?

+2

可能重复的[如何从url删除hashbang?](https://stackoverflow.com/questions/34623833/how-to-remove-hashbang-from-url) –

+0

( 'mode:history'是对的;你是否也在[这里]描述了服务器端的配置(https://router.vuejs.org/en/essentials/history-mode.html)?) –

+0

@DanielBeck不是'模式:历史'重新加载页面,即使我配置它? – ramazan793

回答

1

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

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

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

您也可以以编程方式从一个路由路由到另一个路由。为此,请使用$router.push()。下面是该文档:link

+1

明白了。谢谢! – ramazan793