为什么我们需要在哈希导航 URL 中使用 bang 标记?

Ser*_*.by 5 javascript hash hashtag single-page-application

我们正在开发带有哈希标签导航的 SPA。在另一个 SPA 网站上看到有散列标签 URL,如http://example.com/#!/users 我们的应用程序当前实现散列标签 URLS 没有 ! (bang,感叹号)像http://example.com/#/users 在 URL 中使用 bang 标记有什么原因吗?我已经检查了一些 SO 问题,一些文档: URL hash-bang (#!/) 前缀而不是 Angular 1.6 中的简单哈希 (#/) 人们希望摆脱他们的 SPA 中的感叹号。

但是,Angular Changelog 指出在 URL 中添加 bang 标记是一个重大变化:https : //github.com/angular/angular.js/blob/master/CHANGELOG.md#location-due-to

Google 的文档还显示了一个带有感叹号的示例:https : //developers.google.com/webmasters/ajax-crawling/docs/getting-started

我的主要问题是 - 我们需要在哈希 URL 中使用感叹号吗?这有什么意义吗?

提前感谢您的回答!

cev*_*ing 7

RFC 3986指定 URL 片段以哈希开头。片段通常引用 HTML 锚点。而且HTML 4定义了 HTML 锚点的 ID 不能包含 bang。

如果您想确保您的标签不会与 HTML 锚点发生冲突,用 bang 标记标签可能会很有用。


Tox*_*ron 5

正如@ceving已经解释的那样,原因是为了避免与元素 id 发生冲突。如果您查看下面的示例并考虑使用一个名为“main”的角度控制器,那么应​​该如何解释 URL 会产生冲突。

如果您单击“Goto Main”,您会看到光标在跳动,否则不会。

<a href="#main">Goto Main</a>

<a href="#!main">Open Main Controller</a>

<p id="main">I am main!</p>
Run Code Online (Sandbox Code Playgroud)