如果我目前的网址是:xzy.com/#/home/new
$location.hash()
提供home/new
,$location.path
也提供home/new
$location.hash("#/home/new")
或$location.path("/home/new")
两者都不重新加载部分,但如果我location.href="#/home/new"
,则重新加载部分。这是为什么?此外,如果在部分内部有一个<a href="#/home/new">
,它也会重新加载部分。
为什么不设置路径/哈希重新加载部分?
答案 0 :(得分:26)
路线分为两部分。
第一个“哈希”实际上仅用于浏览器兼容性,如果您处于HTML5模式则不会显示。
例如,给定此URL:
http://localhost/spa.htm
如果你设置:
$location.path('/myPath');
你会得到:
http://localhost/spa.htm#/myPath
在这种情况下,“hash”只是供浏览器保存URL,方法是路径。另请注意,当您在没有前置/添加的情况下调用路径时,即'myPath'
变为'/myPath'
。
如果您随后设置:
$location.hash('myHash');
你会得到:
http://localhost/spa.htm#/myPath#myHash
最后,让我们假设您没有先设置路径,然后您将获得:
http://locahost/spa.htm#/#myHash
如果您使用的是HTML5模式,则会在没有初始哈希的情况下附加路径。
第一个哈希用于附加路由,第二个哈希是对页面上内容的引用。例如,如果您使用$anchorScroll
服务,它将回复$location.hash()
而不是$location.path()
中的内容。
总结:
http://localhost/spa.htm#{path}#{hash}
答案 1 :(得分:0)
今天早上我有一个类似的问题,谷歌带领我来到这里。 灵感来自其他答案以及我所做的一些谷歌搜索,这是我的结果:
例如,给定浏览器网址:
http://localhost:8080/test.html#!/testpath#testhash%20with%20someothers
在AngularJS中,
url
是
/ testpath#testhash
path
是
/ testpath
换句话说,从左到右,path
从网址中的第一个字符开始,以#
或?
或网址末尾结束。
path
始终以'/'.so开头,如果未指定path
,则路径设置为“/
”而不是“”< / p>
hash
是
testhash%20with%20someothers
换句话说,hash
从#
中url
的下一个字符开始,到url
location.href
。当您说:location.href="#"
时,它就像点击anchor
标记一样:
<a href="#">click</a>
在调用方法$location.path
,$location.hash
作为设置者时,他们会更改浏览器网址以符合您的要求。
而且,为什么你想让AngularJS RELOAD 一个页面呢? :)
答案 2 :(得分:-2)
问题的第二部分,为什么不重定向的原因可能是:
您可能需要更新绑定,使用$ scope。$ apply,当您使用除了本地javascript,jquery代码之外的代码时,这是必需的
例如:
$scope.$apply(function(){
$location.path("#/home/new");
})