Je veux remplacer la directive ng-click: pour certains, faire quelques changements $ rootscope avant chaque exécution de ng-click. Comment faire?
Vous ne pouvez pas remplacer les directives intégrées AngularJS. Cependant, vous pouvez définir plusieurs directives avec le même nom et les exécuter sur le même élément. En affectant priority
approprié à votre directive, vous pouvez ensuite contrôler si votre directive s'exécute avant ou après une directive intégrée.
Cette plunker montre comment construire une directive ng-click
Qui s'exécute avant le ng-click
Intégré. Le code est également indiqué ci-dessous. Lorsque vous cliquez sur le lien, le ng-click
Personnalisé s'exécute en premier, puis le ng-click
Intégré.
index.html
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="[email protected]" data-semver="1.9.0" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.js"></script>
<script data-require="[email protected]" data-semver="1.0.7" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-controller="MyCtrl">
<a ng-click="alert()">Click me</a>
</body>
</html>
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!')
}
})
Chaque directive est un service spécial dans AngularJS, vous pouvez remplacer ou modifier n'importe quel service dans AngularJS, y compris la directive
Par exemple, supprimez le ngClick
intégré
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;
}]);
});
prise en charge angulaire de plusieurs directives portant le même nom afin que vous puissiez enregistrer votre propre directive 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');
});
}
}
});
consultez http://plnkr.co/edit/U2nlcA?p=preview J'ai écrit un exemple qui a supprimé angular intégré _ ng-click
et ajoutez un ngClick
personnalisé