如果你在这样的地方......
http://www.domain.com/index.html
...你有一个指向同一位置的链接......
<a href="/index.html">My Link</a>
...然后点击链接什么也没做。通常情况下,您将被正常重定向到页面;一种刷新页面的方便方法(无需完全刷新)。
我已经将这种奇怪行为的罪魁祸首追溯到AngularJS。
请注意以下示例:
<body>
<a href="">Sample Link</a>
<script>
var SampleApp = angular.module("SampleApp", []);
</script>
</body>
通过点击链接,浏览器会尝试转到同一位置(因为空白的href)。 这是正常的。
现在让我们激活Angular:
<body ng-app="SampleApp">
<a href="">Sample Link</a>
<script>
var SampleApp = angular.module("SampleApp", []);
</script>
</body>
点击该链接无效。
为什么AngularJS会以这种方式破坏链接?有没有明显的理由让我失踪?
答案 0 :(得分:9)
为什么Angular会阻止href
的经典行为?
来自Mastering web component with AngularJs:
AngularJS预先捆绑了a指令,该指令阻止了 省略href属性时对链接的默认操作。这个 允许我们使用a标签创建可点击元素 ng-click指令。例如,我们可以按如下方式调用
a
标记:<a ng-click='showFAQ()'>Frequently Asked Questions</a>
拥有没有默认导航操作的标签非常方便 几个CSS框架使用a标签来呈现不同类型的 视觉元素,导航动作没有多大意义。 例如,Twitter的Bootstrap CSS框架使用a标签 在标签和手风琴组件中渲染标题。
要保留的关键字是:“方便”
答案 1 :(得分:1)
Angular会覆盖a
代码:https://github.com/angular/angular.js/blob/master/src/ng/directive/a.js
这里要注意的是:
// if we have no href url, then don't navigate anywhere.
if (!element.attr('href')) {
event.preventDefault();
}
Angular由于ngHref
而执行此操作,{{3}}仅在角度和范围完全加载后设置href
,从而防止用户意外转到/{{pageUrl}}/
。
如果您想重新加载页面,您应该查看Angular提供的$location
服务。