如何防止锚标签上的默认值?

假设我有一个锚标记,例如


<a href="#" ng-click="do()">Click</a>

如何防止浏览器导航到AngularJS中的#?


qq_花开花谢_0
浏览 538回答 3
3回答

慕容3067478

此后,我改变了主意。经过更多的开发和花时间在此上,我相信针对此问题的更好解决方案是执行以下操作:<a ng-click="myFunction()">Click Here</a>然后更新您css的规则,以执行以下操作:a[ng-click]{&nbsp; &nbsp; cursor: pointer;}它更加简单,并提供完全相同的功能,并且效率更高。希望对将来寻找该解决方案的其他人有所帮助。以下是我以前的解决方案,仅出于遗留目的而留在这里:如果您经常遇到此问题,则可以通过以下简单指令来解决此问题:app.directive('a', function() {&nbsp; &nbsp; return {&nbsp; &nbsp; &nbsp; &nbsp; restrict: 'E',&nbsp; &nbsp; &nbsp; &nbsp; link: function(scope, elem, attrs) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(attrs.ngClick || attrs.href === '' || attrs.href === '#'){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elem.on('click', function(e){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;};});它检查所有锚标记(<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() {&nbsp; &nbsp; return function(scope, element, attrs) {&nbsp; &nbsp; &nbsp; &nbsp; $(element).click(function(event) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; event.preventDefault();&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }})现在,您可以将eat-click属性添加到任何元素,它将preventDefault()自动进行编辑。好处:您不必将丑陋的$event对象传递给do()函数。您的控制器更易于单元测试,因为它不需要存根$event对象
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

AngularJS