Как я могу получить доступ к $event внутри директивы?

#angularjs #angularjs-directive

#angularjs #angularjs-директива

Вопрос:

Кажется, я не могу передать его как атрибут!

Я могу добавить ng-click=»function($event)» и передать $event таким образом функции контроллера, но я хотел бы получить к нему доступ внутри директивы.

Конечная цель — остановить распространение () и / или preventDefault() элемента внутри директивы, а не в контроллере.

РЕДАКТИРОВАТЬ: я отправлю соответствующий код

 <div ng-app="myApp" ng-controller="MyCtrl">
  <button stop-toggle ng-click="testFunction($event)">
     click me
  </button>
  Hello, {{name}}!
</div>
  

 var myApp = angular.module('myApp',[]);

//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});

function MyCtrl($scope) {
    $scope.name = 'Superhero';

    $scope.testFunction = function($event){
       console.log("you can access the event here:", $event);
       $event.stopPropagation();
    }
}

myApp.directive('stopToggle', function(){
    return {
     link: function(scope, elem, attrs){
        elem.bind('click', function(){
           console.log("how do i access the $event here??");
           // elem.stopPropagation();  // invalid function
           // elem.preventDefault();    // invalid function
        })

     }
  }
});
  

http://jsfiddle.net/Lvc0u55v/10656/

Комментарии:

1. @AnirudhMangalvedhekar у angular нет on() метода

2. Пожалуйста, покажите соответствующий код. Вы не можете установить $event сам по себе атрибут in, потому что он специфичен для фактического события, которое должно произойти первым

3. elem.bind(‘click’, function () {} заменяет on .. но в нем я могу получить доступ к области видимости, самому элементу и атрибутам элемента; не к $event

4. конечно, это возможно .. событие является первым аргументом обработчика события

5. @AnirudhMangalvedhekar Точно. Спасибо 🙂 И ‘.on’ это так!

Ответ №1:

     var myApp = angular.module('myApp',[]);
    myApp.directive('stopToggle', function(){
       return {
             link: function(scope, elem, attrs){
             elem.on('click', function(e){
                 e.stopPropagation(); 
                 e.preventDefault();   
        })

     }
  }
});
  

Просто передайте event в качестве аргумента функции внутри .on()