รับองค์ประกอบดั้งเดิมจาก ng-click


204

ฉันมีรายการสิ่งของในมุมมองของฉันพร้อม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>

ฉันกำลังจัดการกับเหตุการณ์การคลิกในfooฟังก์ชั่นในคำสั่งของฉันผ่าน$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
       }
   })();

มีวิธีง่ายๆในการรับการอ้างอิงองค์ประกอบที่ng-clickถูกผูกไว้โดยไม่ต้องดำเนินการ DOM ในคำสั่งของฉัน

คำตอบ:


317

คุณต้องแทน$event.currentTarget$event.target


3
ขอบคุณมันใช้งานได้แล้ว มันแปลกที่คุณสมบัติ currentTarget ในวัตถุ $ event ถูกตั้งค่าเป็น null
Ozrix

2
นี่เป็นเรื่องแปลกอย่างแน่นอน ... ถ้าคุณบันทึกวัตถุ $ event $ event.currentTarget ดูเหมือนจะเป็นโมฆะ อย่างไรก็ตามถ้าคุณบันทึกการอ้างอิง $ event.currentTarget มันจะแสดงองค์ประกอบที่ถูกต้อง
richardaday

6
var elem = $event.currentTarget || $event.srcElementฉันมักจะใช้ มันดูเป็นมิตรมากขึ้น แต่ฉันก็ไม่รู้ว่ามันจำเป็นอีกต่อไปแล้ว
WebWanderer

12
console.log แสดงวัตถุที่เปลี่ยนแปลงไม่ได้ลึกที่สถานะสุดท้ายของการดำเนินการไม่ได้อยู่ในสถานะเมื่อเรียกว่า console.log ดูstackoverflow.com/questions/22059811/…
Tivie

13

ไม่ใช่คำตอบที่ตรงกับคำถามนี้ แต่แทนที่จะเป็น "ปัญหา" ที่$event.currentTargetเห็นได้ชัดว่าตั้งเป็นศูนย์

นี่เป็นเพราะความจริงที่ว่า console.log แสดงวัตถุที่ไม่แน่นอนลึกที่สถานะสุดท้ายของการดำเนินการไม่ได้อยู่ในสถานะเมื่อ console.log ถูกเรียก

คุณสามารถตรวจสอบข้อมูลนี้ได้ที่: การโทรไปยัง console.log อย่างต่อเนื่องจะให้ผลลัพธ์ที่ไม่สอดคล้องกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.