отримати оригінальний елемент за допомогою ng-клацання


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 встановлена ​​на нуль.
Озрікс

2
Це, безумовно, дивно ... якщо ви реєструєте об'єкт $ подія, $ 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 дають непослідовні результати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.