Ci sono così tante risposte a questa domanda qui, ma sembra che ci sia un po 'di confusione su ciò che sta realmente accadendo qui.
In primo luogo, la tua premessa
"href sostituisce ng-click in Angular.js"
è sbagliato. Quello che sta effettivamente accadendo è che dopo il tuo clic, l'evento di clic viene prima gestito da angular (definito dalla ng-click
direttiva in angular 1.x e click
in angular 2.x +) e quindi continua a propagarsi (il che alla fine fa sì che il browser navighi al URL definito con l' href
attributo) (vedere questo per ulteriori informazioni sulla propagazione degli eventi in javascript)
Se vuoi evitarlo, dovresti annullare la propagazione dell'evento utilizzando il metodo dell'interfaccia The EventpreventDefault()
:
<a href="#" ng-click="$event.preventDefault();logout()" />
(Questa è pura funzionalità javascript e non ha nulla a che fare con angolare)
Ora, questo risolverà già il tuo problema ma questa non è la soluzione ottimale. Angular, giustamente, promuove il pattern MVC . Con questa soluzione, il tuo template html viene mischiato con la logica javascript. Dovresti cercare di evitarlo il più possibile e inserire la tua logica nel tuo controller angolare. Quindi sarebbe un modo migliore
<a href="#" ng-click="logout($event)" />
E nel tuo metodo logout ():
logout($event) {
$event.preventDefault();
...
}
Ora l'evento clic non raggiungerà il browser, quindi non tenterà di caricare il collegamento indicato da href
. (Tuttavia, tieni presente che se l'utente fa clic con il pulsante destro del mouse sul collegamento e apre direttamente il collegamento, non ci sarà affatto un evento di clic. Invece caricherà direttamente l'URL indicato dall'attributo href
.)
Per quanto riguarda i commenti sul colore dei collegamenti visitati nei browser. Anche in questo caso questo non ha nulla a che fare con angolare, se href="..."
per impostazione predefinita punti a un URL visitato dal browser, il colore del collegamento sarà diverso. Questo è controllato da CSS: selezionato Selector , puoi modificare il tuo CSS per sovrascrivere questo comportamento:
a {
color:pink;
}
PS1 :
Alcune risposte suggeriscono di utilizzare:
<a href .../>
href
è una direttiva angolare. Quando il tuo modello viene elaborato da angular, questo verrà convertito in
<a href="" .../>
Questi due modi sono essenzialmente gli stessi.