Wenn beide href- und ng-click-Attribute definiert sind:
<a href="#" ng-click="logout()">Sign out</a>
Das href
Attribut hat Vorrang vor ng-click.
Ich suche nach einer Möglichkeit, die Priorität von ng-click zu erhöhen.
href
wird für Twitter Bootstrap benötigt, ich kann es nicht entfernen.
Antworten:
Sie sollten wahrscheinlich nur ein Button-Tag verwenden, wenn Sie keinen Uri benötigen.
quelle
In diesem Beispiel von der Website für eckige Dokumentation müssen
href
Sie es nur einer leeren Zeichenfolge zuweisen:http://docs.angularjs.org/api/ng.directive:select
quelle
href="#"
) bewirkt ein erneutes Laden der Seite, was ebenfalls falsch ist.href=""
löst es.<a href="javscript:void(0)" ng-click="logout()">Sign out</a>
wird Ihnen auch gut dienenSie können das Standardverhalten des Klickereignisses einfach direkt in Ihrer Vorlage verhindern.
Per den Winkellagen ,
quelle
Hier ist eine andere Lösung:
dh einfach das # aus dem href-Attribut entfernen
quelle
Nur noch ein Hinweis. Wenn Sie eine echte URL benötigen (um die Zugänglichkeit des Browsers zu unterstützen), können Sie Folgendes tun:
Vorlage:
Richtlinie:
Auf diese Weise kann Ihr Code in linkClicked () ausgeführt werden, bevor Sie zum Link navigieren
quelle
In Angular sind
<a>
s Direktiven . Wenn Sie eine leerehref
oder keine habenhref
, ruft Angular anevent.preventDefault
.Aus der Quelle :
Hier ist ein Plnkr , der das fehlende
href
Szenario demonstriert .quelle
Dies funktionierte für mich in IE 9 und AngularJS v1.0.7:
Vielen Dank an duckeggs 'Kommentar für die funktionierende Lösung!
quelle
Es gibt hier so viele Antworten auf diese Frage, aber es scheint ein wenig Verwirrung darüber zu geben, was hier tatsächlich vor sich geht.
Erstens Ihre Prämisse
ist falsch. Was tatsächlich passiert, ist, dass das Klickereignis nach dem Klicken zuerst von eckig (definiert durch die
ng-click
Direktive in eckigem 1.x undclick
in eckigem 2.x +) behandelt wird und sich dann weiter ausbreitet (was den Browser schließlich dazu veranlasst, zu navigieren) URL mithref
Attribut definiert ). (Siehe dies zur Ereignisverbreitung in Javascript finden Sie hier)Wenn Sie dies vermeiden wollen, dann sollten Sie die Ereignispropagierung mit der abbrechen Event - Schnittstelle des
preventDefault()
Verfahrens :(Dies ist reine Javascript-Funktionalität und hat nichts mit Winkel zu tun.)
Dies wird Ihr Problem bereits lösen, aber dies ist nicht die optimale Lösung. Angular fördert zu Recht das MVC-Muster . Bei dieser Lösung wird Ihre HTML-Vorlage mit der Javascript-Logik gemischt. Sie sollten versuchen, dies so weit wie möglich zu vermeiden und Ihre Logik in Ihren Winkelregler zu integrieren. Ein besserer Weg wäre also
Und in Ihrer logout () -Methode:
Jetzt erreicht das Klickereignis den Browser nicht mehr und versucht nicht, den Link zu laden, auf den verwiesen wird
href
. (Beachten Sie jedoch, dass, wenn der Benutzer mit der rechten Maustaste auf den Link klickt und den Link direkt öffnet, überhaupt kein Klickereignis auftritt. Stattdessen wird die URL, auf die dashref
Attribut zeigt, direkt geladen .)Zu den Kommentaren zur besuchten Linkfarbe in den Browsern. Auch dies hat nichts mit Winkel zu tun. Wenn Sie
href="..."
standardmäßig auf eine von Ihrem Browser besuchte URL verweisen, ist die Linkfarbe unterschiedlich. Dies wird durch CSS gesteuert : Selector besucht . Sie können Ihr CSS ändern, um dieses Verhalten zu überschreiben:PS1 :
Einige Antworten empfehlen:
href
ist eine Winkelrichtlinie. Wenn Ihre Vorlage im Winkel verarbeitet wird, wird diese in konvertiertDiese beiden Wege sind im Wesentlichen gleich.
quelle
Schreiben Sie einfach ng-click vor href .. Es hat bei mir funktioniert
quelle
Ich glaube nicht, dass Sie "#" aus href entfernen müssen. Folgende Arbeiten mit Angularjs 1.2.10
quelle
Sie können dies auch versuchen:
quelle
Ich werde für Sie ein Beispiel hinzufügen, das für mich funktioniert, und Sie können es ändern, wie Sie möchten.
Ich füge den folgenden Code in meinen Controller ein.
und für meine Ansichtsseite füge ich den folgenden Code hinzu.
quelle
Haben Sie versucht, innerhalb der Abmeldefunktion selbst umzuleiten? Angenommen, Ihre Abmeldefunktion lautet wie folgt
Dann können Sie einfach haben
quelle
Bitte prüfen Sie das
quelle
quelle
Das funktioniert bei mir
quelle