从ng-click获取原始元素

Ozr*_*rix 198 angularjs angularjs-directive

我的视图中有一个项目列表,ng-click附在它们上面:

<ul id="team-filters">
    <li ng-click="foo($event, team)" ng-repeat="team in teams">
         <img src="{{team.logoSmall}}" alt="{{team.name}}" title="{{team.name}}">
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

foo在我的指令中处理函数中的click事件,$event作为对已被单击的对象的引用传递,但我得到对img标记的引用,而不是li标记.然后,我必须做这样的事情来得到li:

$scope.foo = function($event, team) {
   var el = (function(){
       if ($event.target.nodeName === 'IMG') {
          return angular.element($event.target).parent(); // get li
       } else {
          return angular.element($event.target);          // is li
       }
   })();
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法来获取对ng-click绑定的元素的引用,而不在我的指令中执行DOM操作?

Eng*_*eer 309

你需要$event.currentTarget而不是$event.target.

  • console.log在最后的执行状态下显示深度可变对象,而不是在调用console.log时的状态.请参阅http://stackoverflow.com/questions/22059811/consecutive-calls-to-console-log-produce-inconsistent-results (11认同)
  • 我通常会使用`var elem = $ event.currentTarget || $ event.srcElement`.它总是更友好的交叉浏览,但我不知道它是否必要. (6认同)
  • 谢谢,它的工作.奇怪的是$ event对象中的currentTarget属性设置为null. (3认同)
  • 这绝对很奇怪……如果您记录 $event 对象,则 $event.currentTarget 看起来为空。但是,如果您记录 $event.currentTarget 引用,它会显示正确的元素。 (2认同)

Tiv*_*vie 13

不是这个问题的直接答案,而是$event.currentTarget显然被设置为null 的"问题" .

这是因为console.log在最后的执行状态下显示了深度可变对象,而不是在调用console.log时的状态.

您可以查看此信息获取更多信息:对console.log的连续调用会产生不一致的结果