我可以从AngularJS中收回URL哈希片段的控制权吗?
我使用的是AngularJS,希望在地址栏中处理给定的我可以从AngularJS中收回URL哈希片段的控制权吗?,angularjs,url,Angularjs,Url,我使用的是AngularJS,希望在地址栏中处理给定的#散列片段。然而,-这是关键-我不会使用散列片段来编码路径。但安格拉斯似乎坚持这样解释 例如,禁用HTML5模式时: 给定的URL:http://my.domain.com#my-散列 变成http://my.domain.com/#/my-散列,以及 $location.hash()将为空 当启用HTML5模式时: 给定的URL:http://my.domain.com#my-散列 变成http://my.domain.com/my-
#散列片段
。然而,-这是关键-我不会使用散列片段来编码路径。但安格拉斯似乎坚持这样解释
例如,禁用HTML5模式
时:
- 给定的URL:
http://my.domain.com#my-散列
- 变成
,以及http://my.domain.com/#/my-散列
将为空$location.hash()
HTML5模式时:
- 给定的URL:
http://my.domain.com#my-散列
- 变成
http://my.domain.com/my-hash
,以及
$location.hash()
仍将为空
AngularJS一定在想:“哦,你有html5,让我帮你删除这个散列。”。多体贴啊
从$location.hash()
获取任何内容的唯一方法是URL具有双哈希:
- 对于给定的URL:
http://my.domain.com##my-散列
$location.hash()
最终等于“我的哈希”
,并且
- 如果还
$locationProvider.html5Mode(true)
则从URL中删除一个哈希值
但我确实需要一个简单的散列字符来保持未处理状态。这可能吗?#
在angular api文档页面上似乎工作得很好。所以通过一点窥探和测试,我发现
app.config(function($locationProvider) {
$locationProvider.html5Mode(true).hashPrefix('!');
});
与众不同。什么是用例?您是否考虑过使用search
而不是hash?这是hash片段的原始用例:我使用它将注意力集中在当前文档的特定部分<代码>搜索
过于冗长,用于其他目的。我认为没有任何简单的方法可以重新获得对#的控制,但您可以选择关注文档的一部分,,,,@EliteOctagon:我知道有Javascript方法可以做到这一点。事实上,我自己也会使用Javascript,因为我所说的特定类型的“焦点”不仅仅是滚动到某个元素我的问题背后的目的是获得好的、可读的URL。我已经为我的应用程序精心设计了一个URL方案,该方案要求将哈希片段用于此目的。--(我可能不得不破解AngularJS代码。)当你抓取window.location.hash时会发生什么?啊,hashPrefix!回想起来,我从来没有尝试过这个,真是愚蠢。:-)这并不理想,因为这留下了一个字符,我不能再在散列片段的开头使用。但我相信我能找到一个对我来说无关紧要的角色。谢谢如果有人不想使用html5模式,该怎么办?hashPrefix
也适用于非html5模式(对于非html5浏览器,它必须能够依靠该模式),请参阅示例和进一步的文档