3 回答
TA贡献1773条经验 获得超3个赞
此后,我改变了主意。经过更多的开发和花时间在此上,我相信针对此问题的更好解决方案是执行以下操作:
<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应用程序中全部使用了此指令。
TA贡献1776条经验 获得超12个赞
根据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 />
TA贡献1820条经验 获得超2个赞
我更喜欢对此类事情使用指令。这是一个例子
<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对象
- 3 回答
- 0 关注
- 597 浏览
添加回答
举报