我正在学习Angular JS ui-router,我想知道 ui-router如何设法更改导航栏中的网址而不重新加载整个页面?。
我试过阅读this博客和一些stackoverflow问题,但找不到任何正确的解释。有人可以解释一下吗?
提前致谢!
答案 0 :(得分:2)
这是基于一个简单的事实,我们可以使用超链接(<a>
标签)跳转到文档中的某些部分,并将焦点放在该部分。但是,如果您的href
属性指向页面中不存在的IDs
,则浏览器将不会执行任何操作,只会更改URL中的哈希部分。
在现代浏览器中,每次哈希部分在URL中更改时,都会触发hashchange
事件。 ui-router或任何路由器实际上可以侦听此事件,获取哈希部分并使用配置相应地更新视图部分。
只要您通过单击某个链接触发状态更改,但在某些情况下您可以使用$state.go()
或$location.path()
等方法更改状态,这样就可以正常工作。在这种情况下,我们需要使用HTML5的历史API。有一个pushState方法允许我们更改地址栏中的URL,而不会导致浏览器加载该资源。