-
慕容3067478
此后,我改变了主意。经过更多的开发和花时间在此上,我相信针对此问题的更好解决方案是执行以下操作:<a ng-click="myFunction()">Click Here</a>然后更新您css的规则,以执行以下操作:a[ng-click]{ cursor: pointer;}它更加简单,并提供完全相同的功能,并且效率更高。希望对将来寻找该解决方案的其他人有所帮助。以下是我以前的解决方案,仅出于遗留目的而留在这里:如果您经常遇到此问题,则可以通过以下简单指令来解决此问题:app.directive('a', function() { return { restrict: 'E', link: function(scope, elem, attrs) { if(attrs.ngClick || attrs.href === '' || attrs.href === '#'){ elem.on('click', function(e){ e.preventDefault(); }); } } };});它检查所有锚标记(<a></a>),以查看其锚href属性是否为空字符串("")或哈希('#')或是否有ng-click分配。如果发现这些条件中的任何一个,它将捕获事件并阻止默认行为。唯一的缺点是它为所有锚标记运行此指令。因此,如果页面上有很多锚标记,而您只想防止其中的少量锚标记的默认行为,那么此指令的效率就不是很高。但是,我几乎总是想要preventDefault,因此我在AngularJS应用程序中全部使用了此指令。
-
叮当猫咪
根据ngHref的文档,您应该可以省略 href或执行href =“”。<input ng-model="value" /><br /><a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /><a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /><a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /><a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
-
DIEA
我更喜欢对此类事情使用指令。这是一个例子<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对象