Может ли процесс отслеживания процесса ng-click во время фазы захвата?

Возможно ли иметь события процесса angularjs ng-click во время фазы захвата вместо фазы барботирования? Я хочу агрегировать данные из каждого из родительских элементов, начиная с родительского и заканчивая элементом, на который был нажат.

Ответ 1

Давайте посмотрим исходный код ng-click на ngEventDirs.js#L50

Как вы можете видеть ng-click и все другие директивы событий, используя .on().

Итак, ответ Нет, это невозможно.

Если вам это действительно нужно, вы можете написать для этого специальную директиву. Например, немного измените код ng-click:

.directive('captureClick', function($parse) {
  return {
    restrict: 'A',
    compile: function(element, attrs) {
      var fn = $parse(attrs.captureClick);
      return function(scope, element) {
        element[0].addEventListener('click', function(event) {
          scope.$apply(function() {
            fn(scope, {
              $event: event
            });
          });
        }, true);
      };
    }
  }
});

и используйте его следующим образом:

<div title="A" ng-click="onBubbled($event)" capture-click="onCaptured($event)">
  <div title="B" ng-click="onBubbled($event)" capture-click="onCaptured($event)">
    <div title="C" ng-click="onBubbled($event)" capture-click="onCaptured($event)">
      Yo!
    </div>
  </div>
</div>

Пример Plunker: http://plnkr.co/edit/SVPv0fCNRQX4JXHeL47X?p=preview