Angular 在 URLS 中使用 #

Angular using # in URLS

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

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

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

路由策略

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

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

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

Older browsers send page requests to the server when the location URL changes unless the change occurs after a "#" (called the "hash"). Routers can take advantage of this exception by composing in-application route URLs with hashes.

为什么Angular支持哈希路由

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

angular 利用 HashLocationStrategy 的事实是 # 符号后的任何内容都不是' t 发送到服务器 - 这使得它非常适合用于存储应用程序状态。

为什么有用

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

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

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

http://localhost:4200/

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

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