dapatkan elemen asli dari ng-klik

204

Saya memiliki daftar item dalam pandangan saya dengan ng-clickterlampir:

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

Saya menangani acara klik dalam foofungsi dalam arahan saya, meneruskan $eventsebagai referensi ke objek yang telah diklik, tapi saya mendapatkan referensi ke imgtag, bukan litag. Saya kemudian harus melakukan hal-hal seperti ini untuk mendapatkan 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
       }
   })();

Apakah ada cara sederhana untuk mendapatkan referensi ke elemen yang ng-clickterikat, tanpa melakukan operasi DOM dalam arahan saya?

Ozrix
sumber

Jawaban:

317

Anda perlu, $event.currentTargetbukan $event.target.

Insinyur
sumber
3
Terima kasih, ini berhasil. Sungguh aneh bahwa properti currentTarget dalam objek $ event disetel ke nol.
Ozrix
2
Ini benar-benar aneh ... jika Anda mencatat objek $ event, $ event.currentTarget terlihat null. Namun, jika Anda mencatat referensi $ event.currentTarget, ini menunjukkan elemen yang benar.
richardaday
6
Saya biasanya akan menggunakan var elem = $event.currentTarget || $event.srcElement. Selalu lebih ramah lintas-silang, namun saya tidak tahu apakah perlu lagi.
WebWanderer
12
console.log menunjukkan objek yang bisa berubah dalam kondisi eksekusi terakhir, bukan pada kondisi ketika console.log dipanggil. lihat stackoverflow.com/questions/22059811/...
Tivie
13

Bukan jawaban langsung untuk pertanyaan ini melainkan untuk "masalah" yang $event.currentTargettampaknya disetel ke nol.

Hal ini disebabkan oleh fakta bahwa console.log menunjukkan objek yang dapat berubah dalam kondisi eksekusi terakhir, bukan pada kondisi ketika console.log dipanggil.

Anda dapat memeriksa ini untuk informasi lebih lanjut: Panggilan berurutan ke console.log menghasilkan hasil yang tidak konsisten

Tivie
sumber