为什么我们需要在哈希导航 URL 中使用感叹号?

Why we need bang mark in hash navigation URLs?

我们正在开发带有散列标签导航的 SPA。在另一个 SPA 网站上看到有散列标签 URLs like http://example.com/#!/users 我们的应用程序目前实现的散列标签 URLS 没有! (砰,感叹号)喜欢 http://example.com/#/users 在 URL 中使用感叹号有什么原因吗?我检查了几个 SO 问题,一些文档: 人们希望摆脱 SPA 中的感叹号。

但是,Angular 变更日志指出在 URL 中添加感叹号是一项重大变更: 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?有什么意义吗?

提前感谢您的回答!

RFC 3986 specifies that a URL fragment starts with a hash. A fragment references typically a HTML anchor. And HTML 4定义HTML锚点的ID不能包含bang。

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

正如 @ceving 已经解释的那样,原因是为了避免与元素 ID 发生冲突。如果您查看下面的示例并考虑使用一个名为 "main" 的 angular 控制器,那么在如何解释 URL 方面会存在冲突。

如果你点击 "Goto Main" 你会看到光标跳动,否则不会。

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

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

<p id="main">I am main!</p>