如何防止锚标签默认?
假设我有一个锚标签,如
<a href="#" ng-click="do()">Click</a>
我该如何防止浏览器在AngularJS中导航到#号?
更新 :我从此改变了我对这个解决方案的看法。 经过更多的开发和时间的工作,我相信对这个问题的更好的解决方案是做到以下几点:
<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 />
您可以将$ event对象传递给您的方法,并在其上调用$event.preventDefault()
,以使默认处理不会发生:
<a href="#" ng-click="do($event)">Click</a>
// then in your controller.do($event) method
$event.preventDefault()
链接地址: http://www.djcxy.com/p/71701.html