Автоматически передать $ событие с ng-click?
Я знаю, что могу получить доступ к событию click от ng-click
если я передам в $event
объект вот так:
<button ng-click="myFunction($event)">Give me the $event</button>
<script>
function myFunction (event) {
typeof event !== "undefined" // true
}
</script>
Это немного раздражает, чтобы передать $event
явно каждый раз. Можно ли установить ng-click
чтобы как-то передать его в функцию по умолчанию?
4 ответа:
взгляните на
ng-click
директива источник:... compile: function($element, attr) { var fn = $parse(attr[directiveName]); return function(scope, element, attr) { element.on(lowercase(name), function(event) { scope.$apply(function() { fn(scope, {$event:event}); }); }); }; }
это показывает как
добавить
$event
доng-click
, например:<button type="button" ng-click="saveOffer($event)" accesskey="S"></button>
тут
jQuery.Event
был передан обратный вызов:
как говорили другие, вы не можете на самом деле строго делать то, что вы просите. Тем не менее, все инструменты, доступные для угловой структуры, фактически доступны и вам! Это означает, что вы можете написать свои собственные элементы и предоставить эту функцию самостоятельно. Я написал один из них в качестве примера, который вы можете увидеть на следующем plunkr (http://plnkr.co/edit/Qrz9zFjc7Ud6KQoNMEI1).
ключевые части этого являются то, что я определяю "кликабельный" элемент (не делайте этого, если вам нужна более старая поддержка IE). В коде, который выглядит так:
<clickable> <h1>Hello World!</h1> </clickable>
затем я определил директиву, чтобы взять этот кликабельный элемент и превратить его в то, что я хочу (что-то, что автоматически настраивает мое событие click):
app.directive('clickable', function() { return { transclude: true, restrict: 'E', template: '<div ng-transclude ng-click="handleClick($event)"></div>' }; });
наконец, в моем контроллере у меня есть событие click ready to go:
$scope.handleClick = function($event) { var i = 0; };
Теперь стоит отметить, что этот жесткий кодирует имя метода, который обрабатывает событие click. Если вы хотите устранить это, вы должны быть возможность предоставить директиву с именем вашего обработчика кликов и "tada" - у вас есть элемент (или атрибут), который вы можете использовать и никогда не придется вводить" $event " снова.
надеюсь, что это поможет!