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

Bhu*_*hal 17 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",则重新加载部分.为什么是这样?

此外,如果在部分内部有一个<a href="#/home/new">也将重新加载部分.为什么不设置路径/哈希重新加载部分?

Jer*_*ess 26

路线有两个部分.

第一个"哈希"实际上仅用于浏览器兼容性,如果您处于HTML5模式则不会显示.

例如,给定此URL:

http://localhost/spa.htm 
Run Code Online (Sandbox Code Playgroud)

如果你设置:

$location.path('/myPath'); 
Run Code Online (Sandbox Code Playgroud)

你会得到:

http://localhost/spa.htm#/myPath
Run Code Online (Sandbox Code Playgroud)

在这种情况下,"哈希"只是为浏览器保存URL,方法是路径.还要注意当你调用路径时没有前面的/它被添加,即'myPath'成为'/myPath'.

如果您随后设置:

$location.hash('myHash'); 
Run Code Online (Sandbox Code Playgroud)

你会得到:

http://localhost/spa.htm#/myPath#myHash 
Run Code Online (Sandbox Code Playgroud)

最后,让我们假设你没有先设置路径,然后你会得到:

http://locahost/spa.htm#/#myHash 
Run Code Online (Sandbox Code Playgroud)

如果您使用的是HTML5模式,则会附加路径而不使用初始哈希.

第一个哈希用于附加路由,第二个哈希用于页面上的内容.例如,如果您使用该$anchorScroll服务,它将响应放入的内容$location.hash()而不是内置的内容$location.path().

总结一下:

http://localhost/spa.htm#{path}#{hash}
Run Code Online (Sandbox Code Playgroud)