Ng Click vs Href:哪个优先

Ng-Click vs Href: Which takes priority?

本文关键字:Click vs Href Ng      更新时间:2023-09-26

如果你有一个标签,比如:

   <a href="/hello" ng-click="func()"> Hello </a>

哪个优先,ng-click还是href?

这里没有href和点击事件之间的优先级情况(除非您谈论的是锚点和点击事件的默认操作的优先级)。ng-click是一个指令,它在下面向DOM元素注册事件处理程序,当您单击它时,将触发单击事件。锚点的默认操作(浏览器的)是导航到href中指定的url(如果存在,则为绝对或相对)。点击锚点会触发默认操作,除非event.preventDefault()return false(won't work with handlers registered with angular)(不适用于角度)阻止了它,这可能就是您想要的。

在angular中,您可以将ng-click中的事件作为ng-click="func($event)"传递,您可以在处理程序中使用它,甚至可以内联使用它。

来自W3c

某些事件被指定为可取消。对于这些事件,DOM实现通常具有与该事件相关联的默认操作。一个例子是web浏览器中的超链接。当用户单击超链接时,默认操作通常是激活该超链接。在处理这些事件之前,实现必须检查是否注册了接收事件的事件侦听器,并将事件分派给这些侦听器。然后,这些侦听器可以选择取消实现的默认操作或允许默认操作继续进行。在浏览器中存在超链接的情况下,取消操作将导致无法激活超链接。

取消是通过调用事件的preventDefault方法来完成的。如果一个或多个EventListener在事件流的任何阶段调用preventDefault,则默认操作将被取消。

事实上,我只是自己尝试了一下,然后发布了我的结果,因为另一个答案并没有真正解决问题:

href将在ng单击有机会被调用之前执行。例如:

$scope.redirect = function(){
     window.location.href = 'http://www.stackoverflow.com';
};
<a href="http://www.google.com" ng-click="redirect()">Redirect</a>

这将导致谷歌取代stackoverflow。