Chcę zastąpić dyrektywę ng-click: do niektórych zrobić kilka $ rootscope zmian przed każdym wykonaniem ng-click. Jak to zrobić?AngularJS - jak zastąpić dyrektywę ngClick
Odpowiedz
Nie można zastąpić wbudowanych dyrektyw AngularJS. Można jednak zdefiniować wiele dyrektyw o tej samej nazwie i wykonać je dla tego samego elementu. Przypisując odpowiednią dyrektywę priority
, możesz wtedy kontrolować, czy twoja dyrektywa działa przed czy po wbudowanej dyrektywie.
Ten plunker pokazuje, jak zbudować dyrektywę ng-click
, która jest wykonywana przed wbudowanym ng-click
. Kod jest również pokazany poniżej. Po kliknięciu linku najpierw zostanie uruchomiony niestandardowy ng-click
, a następnie wbudowany ng-click
.
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!')
}
})
Każda dyrektywa jest specjalną usługą wewnątrz angularjs można zastąpić lub zmodyfikować dowolną usługę w angularjs, w tym dyrektywy
Na przykład usuń wbudowany 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;
}]);
});
kątowe wsparcia wielu dyrektyw o tej samej nazwie, dzięki czemu można zarejestrować jesteś właścicielem ngClick
dyrektywa
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');
});
}
}
});
Wyjazd http://plnkr.co/edit/U2nlcA?p=preview pisałem próbkę że usunięte kątowe wbudowaną ng-click
i dodać niestandardowe ngClick
To było dla mnie niezwykle pomocne! Dzięki. –
W jaki sposób zachowałbyś oboje delegatów, ale pozwoliłbyś, aby pierwszy przewodnik rozpowszechniał się warunkowo do wbudowanego uczestnika? –
@AlexWhite przypuszczam, że jest to niemożliwe, ponieważ wiązanie 'click' jest wykonywane z' element.bind' wewnątrz innego wywołania funkcji: https://github.com/angular/angular.js/blob/master/src/ ng/directive/ngEventDirs.js # L62 – saiyancoder
- 1. Jak definiujemy dyrektywę angularjs w module requirejs?
- 2. Jak przetestować dyrektywę AngularJS z przewijaniem
- 3. AngularJS przetestuj dyrektywę z zamień na true
- 4. AngularJS - dynamicznie usuwa dyrektywę z elementu
- 5. AngularJS, ng-click vs ng: click vs ngClick
- 6. Jak zmusić AngularJS do kompilacji kodu wygenerowanego przez dyrektywę?
- 7. AngularJS: Jak kierować określoną dyrektywę z wieloma instancjami
- 8. Jednostka testująca dyrektywę, która definiuje kontroler w AngularJS
- 9. Kiedy napisać dyrektywę?
- 10. Wyizolować dyrektywę zakresu z opcjonalnym ampersand bindingiem w angularjs?
- 11. AngularJS - $ skompiluj dyrektywę z obiektem jako atrybutem Parametr
- 12. Utwórz dyrektywę AngularJS, która nie jest natychmiast wyświetlana?
- 13. Jak zastosować dyrektywę kątową do treści ajax?
- 14. Jak rozszerzyć lub zastąpić istniejące filtry w angularjs?
- 15. zdarzenie Wyłączenie ngClick obsługi w dyrektywie niestandardowego
- 16. angular.js: jak przekazać ngclick z oryginalnego domingu do domingu dyrektywy?
- 17. jak napisać dyrektywę dla angularjs który zastępuje elementu DOM, ale zachowuje Wiązania
- 18. Jak zastosować dyrektywę AngularJS na podstawie zestawu klas według klasy ng?
- 19. Jak używać RegExp Zastąpić, aby zastąpić zdanie?
- 20. Jak zrobić dyrektywę, używając filtrowanych atrybutów HTML?
- 21. Jak utworzyć dyrektywę kątową w sekcji <head> dokumentu?
- 22. Jak przetestować wyjątek w AngularJS
- 23. Załaduj dyrektywę po wywołaniu AJAX
- 24. XSS w kątowym Przekłada dyrektywę
- 25. Dokonywanie zachowanie hiperłączy warunkowego w angularjs
- 26. angularjs: wyzwalanie imprezę, aby symulować działania użytkownika podczas testów jednostkowych dyrektywę
- 27. Jak poprawnie zastąpić równość?
- 28. opracowania, jak zastąpić send_confirmation_instructions
- 29. Jak zastąpić appendChild()?
- 30. Jak zastąpić podciąg napisu
Bardzo dziękuję za szczegółową odpowiedź) – Simcha
Buu, czy możemy całkowicie zatrzymać pierwsze kliknięcie? mam na myśli po uruchomieniu "przesłoniętego" alertu, "wbudowany", aby nie działać. –
Nie należy przekazywać wyrażenia do ng-click, zobacz http://plnkr.co/edit/uROkIcGKLspLnVsjmAKn?p=prewview. Jeśli musisz przekazać s/t, nie obsługuj tego, np. $ scope.alert = function() {}. –