角度在URLS中使用#

时间:2018-09-28 23:52:57

标签: angular url ietf

我目前正在使用一个URL解析器来格式化和更正相对链接。我指定了一些特殊字符,其中包括“#”。

我发现当我处理用Angular开发的页面时,这成为一个问题,因为在URL中使用了#。但是,在读取IETF protocol进行URL命名时,似乎#是保留字符。

有人可以向我解释Angular如何与URL命名交互吗?

1 个答案:

答案 0 :(得分:0)

路由策略

在有角度的项目中配置应用程序路由时,可以在常规HTML5路由(PathLocationStrategy)或“哈希样式URL”路由(HashLocationStrategy)之间进行选择。

默认值为PathLocationStrategy,但是可以通过将{useHash: true}作为第二个参数传递给RouterModule.forRoot()函数来实现散列样式路由

根据Angular关于LocationStrategy and browser URL styles的官方文档:

  

较旧的浏览器在位置URL更改时向服务器发送页面请求,除非更改发生在“#”(称为“哈希”)之后。路由器可以通过在应用程序中使用带有哈希值的路由URL来利用此异常。

为什么Angular支持哈希路由

URL中的#代表锚标识符(RFC1738),在链接到页面中的特定内容时非常有用。

HashLocationStrategy的攻击程度符号#之后的任何内容都不会发送到服务器的事实-使其非常适合用于存储应用程序状态。

为什么有用

通过散列路由,可以在子页面之类的页面上重新加载页面(或通过书签重新访问)

http://localhost:4200/#/articles/35

不向服务器查询子页面,而是返回主应用程序页面

http://localhost:4200/

通过这种方式,服务器实现只需要知道根页面(这是唯一要查询的内容)

使用PathLocationStrategy(默认),需要将服务器设置为处理应用程序实现的每个URL的请求。