Gdy zdefiniowane są oba atrybuty href i ng-click:
<a href="#" ng-click="logout()">Sign out</a>
href
atrybut ma pierwszeństwo przed NG-click.
Szukam sposobu na podniesienie priorytetu ng-click.
href
jest wymagany dla Twitter Bootstrap, nie mogę go usunąć.
Odpowiedzi:
Prawdopodobnie powinieneś po prostu użyć tagu przycisku, jeśli nie potrzebujesz URI.
źródło
Ten przykład z kątowej witryny dokumentacji po prostu działa
href
bez przypisywania go do pustego ciągu:http://docs.angularjs.org/api/ng.directive:select
źródło
href="#"
) powoduje przeładowanie strony, co również jest błędne.href=""
go rozwiązuje.<a href="javscript:void(0)" ng-click="logout()">Sign out</a>
będzie ci również służyćMożesz po prostu zapobiec domyślnemu zachowaniu zdarzenia kliknięcia bezpośrednio w szablonie.
Zgodnie z dokumentacją kątową ,
źródło
Oto inne rozwiązanie:
tzn. Po prostu usuń # z atrybutu href
źródło
Jeszcze tylko jedna wskazówka. Jeśli potrzebujesz prawdziwego adresu URL (do obsługi dostępności przeglądarki), możesz wykonać następujące czynności:
szablon:
dyrektywa:
W ten sposób twój kod w linkClicked () będzie miał szansę na wykonanie przed przejściem do linku
źródło
W Angular
<a>
s są dyrektywami . W związku z tym, jeśli masz pustyhref
lub niehref
, Angular zadzwonievent.preventDefault
.Ze źródła :
Oto plnkr demonstrujący brakujący
href
scenariusz.źródło
To działało dla mnie w IE 9 i AngularJS v1.0.7:
Dzięki komentarzowi duckeggs za działające rozwiązanie!
źródło
Jest tak wiele odpowiedzi na to pytanie, ale wydaje się, że jest trochę nieporozumień co do tego, co się tutaj właściwie dzieje.
Po pierwsze, twoje założenie
jest źle. W rzeczywistości po kliknięciu zdarzenie kliknięcia jest najpierw obsługiwane przez angular (zdefiniowane przez
ng-click
dyrektywę w angular 1.x iclick
angular 2.x +), a następnie kontynuuje propagację (co ostatecznie powoduje przejście przeglądarki do url zdefiniowany zhref
atrybutem). (Zobacz to, aby uzyskać więcej informacji na temat propagacji zdarzeń w javascript)Jeśli chcesz tego uniknąć, powinieneś anulować propagację zdarzenia za pomocą metody interfejsu The Event
preventDefault()
:(To jest czysta funkcjonalność javascript i nie ma nic wspólnego z angularem)
Teraz to już rozwiąże twój problem, ale nie jest to optymalne rozwiązanie. Angular słusznie promuje wzorzec MVC . Dzięki temu rozwiązaniu Twój szablon HTML jest mieszany z logiką javascript. Powinieneś starać się tego unikać tak bardzo, jak to możliwe i umieścić swoją logikę w kontrolerze kątowym. Więc lepszy sposób byłby
A w metodzie logout ():
Teraz zdarzenie click nie dotrze do przeglądarki, więc nie spróbuje załadować wskazanego linku
href
. (Należy jednak pamiętać, że jeśli użytkownik kliknie link prawym przyciskiem myszy i bezpośrednio go otworzy, nie będzie w ogóle zdarzenia kliknięcia. Zamiast tego zostanie bezpośrednio załadowany adres URL wskazany przezhref
atrybut).Odnośnie komentarzy na temat koloru odwiedzanych linków w przeglądarkach. Ponownie nie ma to nic wspólnego z angularem, jeśli
href="..."
domyślnie kierujesz na odwiedzany adres URL przez przeglądarkę, kolor linku będzie inny. Jest to kontrolowane przez CSS: odwiedził Selector , możesz zmodyfikować swój css, aby nadpisać to zachowanie:PS1 :
Niektóre odpowiedzi sugerują użycie:
href
jest dyrektywą kątową. Gdy szablon jest przetwarzany przez kątowe, zostanie on przekonwertowany naTe dwa sposoby są zasadniczo takie same.
źródło
Po prostu napisz ng-click przed href .. Zadziałało dla mnie
źródło
Myślę, że nie musisz usuwać znaku „#” z href. Następujące prace z Angularjs 1.2.10
źródło
Możesz także spróbować tego:
źródło
Dodam dla Ciebie przykład, który działa dla mnie i możesz go zmienić, jak chcesz.
Dodaję poniższy kod w moim kontrolerze.
a na mojej stronie widoku dodaję poniższy kod.
źródło
Czy próbowałeś przekierować wewnątrz samej funkcji wylogowania? Załóżmy na przykład, że funkcja wylogowania jest następująca
Wtedy możesz po prostu mieć
źródło
Proszę to sprawdzić
źródło
źródło
To działa dla mnie
źródło