Angular JS UI-Router如何在不重新加载页面的情况下更改导航栏中的URL

时间:2016-01-07 10:17:42

标签: javascript jquery angularjs angular-ui-router

我正在学习Angular JS ui-router,我想知道 ui-router如何设法更改导航栏中的网址而不重新加载整个页面?

我试过阅读this博客和一些stackoverflow问题,但找不到任何正确的解释。有人可以解释一下吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

这是基于一个简单的事实,我们可以使用超链接(<a>标签)跳转到文档中的某些部分,并将焦点放在该部分。但是,如果您的href属性指向页面中不存在的IDs,则浏览器将不会执行任何操作,只会更改URL中的哈希部分。

在现代浏览器中,每次哈希部分在URL中更改时,都会触发hashchange事件。 ui-router或任何路由器实际上可以侦听此事件,获取哈希部分并使用配置相应地更新视图部分。

只要您通过单击某个链接触发状态更改,但在某些情况下您可以使用$state.go()$location.path()等方法更改状态,这样就可以正常工作。在这种情况下,我们需要使用HTML5的历史API。有一个pushState方法允许我们更改地址栏中的URL,而不会导致浏览器加载该资源。