angularjs中的$ location.path()vs $ location.hash()

时间:2014-03-19 18:55:36

标签: angularjs

如果我目前的网址是:xzy.com/#/home/new

$location.hash()提供home/new$location.path也提供home/new

  1. 这两者有什么不同?
  2. 如果在home / new控制器内,我写$location.hash("#/home/new")$location.path("/home/new")两者都不重新加载部分,但如果我location.href="#/home/new",则重新加载部分。这是为什么?
  3. 此外,如果在部分内部有一个<a href="#/home/new">,它也会重新加载部分。 为什么不设置路径/哈希重新加载部分?

3 个答案:

答案 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

结束时结束 AngularJS中未实现

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");  
})