obtenir l'élément d'origine de ng-click

204

J'ai une liste d'articles à mon avis avec ci- ng-clickjoint:

<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>

Je gère les événements de clic dans la foofonction dans ma directive, en passant $eventcomme référence à l'objet sur lequel on a cliqué, mais j'obtiens une référence à la imgbalise, plutôt qu'à la libalise. Je dois ensuite faire des trucs comme ça pour obtenir 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
       }
   })();

Existe-t-il un moyen simple d'obtenir la référence à l'élément qui y ng-clickest lié, sans effectuer d'opérations DOM dans ma directive?

Ozrix
la source

Réponses:

318

Vous avez besoin $event.currentTargetau lieu de $event.target.

Ingénieur
la source
3
Merci, ça marche. Il est étrange que la propriété currentTarget dans l'objet $ event soit définie sur null.
Ozrix
2
C'est vraiment étrange ... si vous connectez l'objet $ event, $ event.currentTarget semble être nul. Cependant, si vous enregistrez la référence $ event.currentTarget, elle affiche l'élément correct.
richardaday
6
J'utilise habituellement var elem = $event.currentTarget || $event.srcElement. Son toujours été plus convivial, mais je ne sais plus si c'est nécessaire.
WebWanderer
12
console.log montre les objets mutables profonds au dernier état d'exécution, pas à l'état lorsque console.log a été appelé. voir stackoverflow.com/questions/22059811/…
Tivie
13

Pas une réponse directe à cette question mais plutôt à la "question" d' $event.currentTargetêtre apparemment mise à zéro.

Cela est dû au fait que console.log affiche les objets mutables profonds au dernier état d'exécution, et non à l'état lorsque console.log a été appelé.

Vous pouvez vérifier cela pour plus d'informations: Les appels consécutifs à console.log produisent des résultats incohérents

Tivie
la source