AngularJS:删除hashbang中的反斜杠而不启用html5mode

时间:2014-03-12 18:04:45

标签: angularjs

鉴于我们的网址/foo的模板,HTML包含以下内容:

<a href="#bar" ng-click="myfunc()">Hello</a>

我的期望是这会引导我/foo#bar。相反,它导致我/foo#/bar,这是一个问题,因为我需要使用值栏。现在我强行删除斜线以获得价值栏,但这非常糟糕。

我知道这是由于$ location和angularjs的路由机制。以下链接提供了一个通常可以解决此问题的解决方案:AngularJS 1.1.5 - automatically adding hash tag to URLs

然而,启用html5mode搞砸了我们其余的链接,因为它似乎假设我们正在使用单页应用程序,而我们真的不是。事实上,我们甚至没有通过angularjs进行路由。

我正在寻找的是一种从位置散列中删除斜杠的方法。这个问题有一个更简单的解决方案吗?

注意:栏可能是页面中标签的名称,也可能是您可以滚动到的div。为了清楚地了解项目的其他人,我宁愿将其保留为简单的“#”语法。

1 个答案:

答案 0 :(得分:1)

是的,angular 确实假设你正在使用SPA,因为angular是SPA的框架。因此,相对链接总是被处理,就好像它们要进入不同的ng视图一样,因此添加了/

我不知道是否有办法关闭角度路由器,但另一种选择是$location.hash()$anchorScroll()

我建议最好的方法是在范围内放置一个函数(rootScope如果你经常使用锚点),如下所示:

app.run( function($rootScope, $location, $anchorScroll){ 
  $rootScope.scrollTo = function(id){
    $location.hash(id);
    $anchorScroll();
  }
});

然后你的HTML看起来像这样:

<a ng-click="anchorScroll('bar')">Hello</a>