当我使用$ location.hash(“section1”)时,网址最终为http://thing/place#/section1。当我第二次使用$ location.hash(“section1”)时,网址变为http://thing/place#/section1#section1。这是相当令人惊讶的。 ($ location.hash(“section1”)的进一步使用或多或少地按预期行事,在第二个#之后更改URL的最后部分。)
上下文:我正在创建的页面是AngularJS中的单页应用程序,其中页面的多个部分作为模板布局;有一个顶级控制器,模板根据该控制器范围内的“模式”属性隐藏/显示。我正在以一种非常简单的方式使用$ location.hash():当该顶级控制器加载时,它根据$ location.hash()的内容设置模式。 (当模式改变时,模式上有一个$ watch监视$ location.hash(“modeName”)。)
如何说服$ location.hash()只为URL添加一个#,这样我就可以使用$ location.hash()来设置和获取当前模式?
答案 0 :(得分:0)
原来我没有在$ locationProvider中设置html5模式。 (我很惊讶;我认为非html5模式总是有hashbang模式,当我没有看到哈希前面的爆炸时,我认为还有其他事情发生。)作为旁注,我的手表上$ location.hash()也引起了一个无限循环(将hash设置为“#thing”,AngularJS将hash设置为“#/ thing”,重复。),但这是无关的。
对于后人来说,在$ location服务上设置html5模式的方法是将其添加到初始化中:
Angular.module(....)
....controllers, services & squid....
.config(function ($locationProvider) {
$locationProvider.html5Mode(true);
});