在 URLS 中使用 # 的 Angular

lab*_*ca4 5 url angular ietf

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

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

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

Dan*_*iel 16

路由策略

在 angular 项目中配置应用程序路由时,可以在常规 HTML5 路由 ( PathLocationStrategy) 或“散列式 URL”路由 ( HashLocationStrategy) 之间进行选择。

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

根据 Angular 关于LocationStrategy 和浏览器 URL 样式的官方文档:

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

为什么 Angular 支持哈希路由

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

angular利用HashLocationStrategy是这样一个事实,即符号之后的任何内容#都不会发送到服务器- 这使得使用它来存储应用程序状态非常理想。

为什么有用

使用哈希路由在子页面上重新加载页面(或通过书签重新访问),例如

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

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

http://localhost:4200/

这样服务器实现只需要知道根页面(这是唯一会被查询的东西)

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