Il y a tellement de réponses à cette question ici, mais il semble qu'il y ait un peu de confusion sur ce qui se passe réellement ici.
Premièrement, votre prémisse
"href remplace ng-click dans Angular.js"
est faux. Ce qui se passe réellement, c'est qu'après votre clic, l'événement de clic est d'abord géré par angular (défini par la ng-click
directive en angular 1.x et click
en angular 2.x +), puis il continue à se propager (ce qui déclenche finalement le navigateur pour naviguer vers le url définie avec l' href
attribut) (voir ceci pour en savoir plus sur la propagation d'événements en javascript)
Si vous souhaitez éviter cela, vous devez annuler la propagation de l'événement à l'aide de la méthode de l'interface The EventpreventDefault()
:
<a href="#" ng-click="$event.preventDefault();logout()" />
(Ceci est une fonctionnalité javascript pure et n'a rien à voir avec angular)
Maintenant, cela résoudra déjà votre problème mais ce n'est pas la solution optimale. Angular, à juste titre, favorise le modèle MVC . Avec cette solution, votre modèle html est mélangé à la logique javascript. Vous devriez essayer d'éviter cela autant que possible et mettre votre logique dans votre contrôleur angulaire. Donc, une meilleure façon serait
<a href="#" ng-click="logout($event)" />
Et dans votre méthode logout ():
logout($event) {
$event.preventDefault();
...
}
Maintenant, l'événement de clic n'atteindra pas le navigateur, il n'essaiera donc pas de charger le lien pointé par href
. (Cependant, notez que si l'utilisateur clique avec le bouton droit sur le lien et ouvre directement le lien, il n'y aura pas du tout d'événement de clic. Au lieu de cela, il chargera directement l'URL pointée par l' href
attribut.)
Concernant les commentaires sur la couleur des liens visités dans les navigateurs. Encore une fois, cela n'a rien à voir avec angulaire, si href="..."
votre navigateur pointe vers une URL visitée par défaut, la couleur du lien sera différente. Ceci est contrôlé par CSS: visité Selector , vous pouvez modifier votre css pour remplacer ce comportement:
a {
color:pink;
}
PS1 :
Certaines réponses suggèrent d'utiliser:
<a href .../>
href
est une directive angulaire. Lorsque votre modèle est traité par angulaire, il sera converti en
<a href="" .../>
Ces deux moyens sont essentiellement les mêmes.