Ng-Click vs Href:哪个优先?

时间:2014-10-09 21:04:37

标签: javascript html angularjs javascript-events

如果您有以下标签:

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

哪个优先,ng-click或href?

2 个答案:

答案 0 :(得分:2)

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

在角度中,您可以将ng-clickng-click="func($event)"传递为{{1}},您可以在处理程序中使用它,或者甚至可以将其用于内联。< / p>

<强> event

  

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

     

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

答案 1 :(得分:1)

实际上我只是尝试了自己,只是发布了我的结果,因为另一个答案并没有真正清除它:

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

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

这将导致Google而不是stackoverflow。