如何防止锚标签默认?

假设我有一个锚标签,如

<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

上一篇: How to preventDefault on anchor tags?

下一篇: Top level Function calls in Chrome Flame charts