#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
})
}
}
});
Комментарии:
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()