假设我有一个锚标记,比如
<a href="#" ng-click="do()">Click</a>
如何防止浏览器在AngularJS中导航到# ?
假设我有一个锚标记,比如
<a href="#" ng-click="do()">Click</a>
如何防止浏览器在AngularJS中导航到# ?
当前回答
我认为:
<a ng-click="do()">Click</a>
因为根据文档,你应该可以离开href,然后Angular会为你处理防止的默认值!
整个这个防止默认的事情一直困扰着我,所以我创建了一个JSFiddle 说明了Angular在何时何地阻止了默认。
JSFiddle使用的是Angular的a指令——所以应该是完全一样的。您可以在这里看到源代码:一个标记源代码
我希望这将有助于澄清一些。
我本想把这个文档发布到ngHref上,但因为我的名声,我不能。
其他回答
既然你在制作网页应用,为什么还需要链接呢?
把锚换成按钮!
<button ng-click="do()"></button>
我一直都是这么做的。效果好极了!
<a href ng-click="do()">Click</a>
尽管雷诺给出了一个很好的解决方案
<a href="#" ng-click="do(); $event.preventDefault()">Click</a>
我个人发现在某些情况下还需要$event.stopPropagation()来避免一些副作用
<a href="#" ng-click="do(); $event.preventDefault(); $event.stopPropagation();">
Click</a>
就是我的解
您可以执行以下操作
1.从锚(a)标签中删除href属性
2.将css中的指针指针设置为ng click元素
[ng-click],
[data-ng-click],
[x-ng-click] {
cursor: pointer;
}
对于这类事情,我更喜欢使用指令。这里有一个例子
<a href="#" ng-click="do()" eat-click>Click Me</a>
eat-click的指令代码:
module.directive('eatClick', function() {
return function(scope, element, attrs) {
$(element).click(function(event) {
event.preventDefault();
});
}
})
现在,您可以将eat-click属性添加到任何元素,它将自动获得preventDefault()。
好处:
您不必将丑陋的$event对象传递到do()函数中。 你的控制器更具有单元可测试性,因为它不需要去掉$event对象