AngularJS – como sobrescrever a diretiva ngClick

Eu quero sobrescrever a diretiva ng-click: para alguns fazer algumas mudanças no $ rootscope antes de cada execução do ng-click. Como fazer isso?

Você não pode sobrescrever as diretivas internas do AngularJS. No entanto, você pode definir várias diretivas com o mesmo nome e executá-las no mesmo elemento. Atribuindo priority apropriada à sua diretiva, você pode controlar se sua diretiva é executada antes ou depois de uma diretiva interna.

Este plunker mostra como construir uma diretiva ng-click que é executada antes do ng-click integrado. O código também é mostrado abaixo. Ao clicar no link, o ng-click personalizado será executado primeiro e, em seguida, o ng-click integrado será executado.

index.html

         Click me   

script.js

 angular.module('app', []) .directive('ngClick', function($rootScope) { return { restrict: 'A', priority: 100, // give it higher priority than built-in ng-click link: function(scope, element, attr) { element.bind('click', function() { // do something with $rootScope here, as your question asks for that alert('overridden'); }) } } }) .controller('MyCtrl', function($scope) { $scope.alert = function() { alert('built-in!') } }) 

Toda diretiva é um serviço especial dentro do AngularJS, você pode sobrescrever ou modificar qualquer serviço no AngularJS, incluindo diretivas

Por exemplo, remova ngClick

 angular.module('yourmodule',[]).config(function($provide){ $provide.decorator('ngClickDirective', ['$delegate', function($delegate) { //$delegate is array of all ng-click directive //in this case first one is angular buildin ng-click //so we remove it. $delegate.shift(); return $delegate; }]); }); 

suporte angular várias diretivas para o mesmo nome para que você possa registrar sua própria diretiva ngClick

 angular.module('yourmodule',[]).directive('ngClick',function (){ return { restrict : 'A', replace : false, link : function(scope,el,attrs){ el.bind('click',function(e){ alert('do you feeling lucky'); }); } } }); 

confira http://plnkr.co/edit/U2nlcA?p=preview Eu escrevi uma amostra que removeu o ng-click integrado e adicionou um ngClick personalizado