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?

Réponses:


318

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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.