wake-up-neo.com

Holen Sie sich das ursprüngliche Element von ng-click

Ich habe eine Liste mit Elementen in meiner Ansicht, an die ng-click angehängt ist:

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

Ich behandle die Klickereignisse in der Funktion foo in meiner Direktive und übergebe $event als Verweis auf das Objekt, auf das geklickt wurde, aber ich erhalte einen Verweis auf das Tag img anstelle des Tags li. Ich muss dann solche Dinge tun, um das li zu bekommen:

$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
       }
   })();

Gibt es eine einfache Möglichkeit, den Verweis auf das Element abzurufen, an das ng-click gebunden ist, ohne in meiner Direktive DOM-Operationen auszuführen?

195
Ozrix

Sie benötigen $event.currentTarget anstelle von $event.target.

307
Engineer

Keine direkte Antwort auf diese Frage, sondern auf das "Problem" von $event.currentTarget wird anscheinend auf null gesetzt.

Dies liegt an der Tatsache, dass console.log im letzten Ausführungszustand tiefe veränderbare Objekte anzeigt, nicht in dem Zustand, in dem console.log aufgerufen wurde.

Sie können dies überprüfen, um weitere Informationen zu erhalten: Aufeinanderfolgende Aufrufe von console.log führen zu inkonsistenten Ergebnissen

13
Tivie