鉴于我们的网址/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。为了清楚地了解项目的其他人,我宁愿将其保留为简单的“#”语法。
答案 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>