Lorsque les deux attributs href et ng-click sont définis:
<a href="#" ng-click="logout()">Sign out</a>
l' href
attribut est prioritaire sur ng-click.
Je recherche un moyen d'augmenter la priorité de ng-click.
href
est requis pour Twitter Bootstrap, je ne peux pas le supprimer.
Réponses:
Vous devriez probablement simplement utiliser une balise de bouton si vous n'avez pas besoin d'un uri.
la source
Cet exemple du site de documentation angulaire se fait
href
sans même l'attribuer à une chaîne vide:http://docs.angularjs.org/api/ng.directive:select
la source
href="#"
) provoque un rechargement de page, ce qui est également faux.href=""
résout.<a href="javscript:void(0)" ng-click="logout()">Sign out</a>
vous servira bien aussiVous pouvez simplement empêcher le comportement par défaut de l'événement de clic directement dans votre modèle.
Selon la documentation angulaire ,
la source
Voici une autre solution:
ie Supprimez simplement le # de l'attribut href
la source
Encore un indice. Si vous avez besoin d'une URL réelle (pour prendre en charge l'accessibilité du navigateur), vous pouvez effectuer les opérations suivantes:
modèle:
directif:
De cette façon, votre code dans linkClicked () aura la possibilité de s'exécuter avant de naviguer vers le lien
la source
Dans Angular, les
<a>
s sont des directives . En tant que tel, si vous avez un videhref
ou nonhref
, Angular appelleraevent.preventDefault
.De la source :
Voici un plnkr démontrant le
href
scénario manquant .la source
Cela a fonctionné pour moi dans IE 9 et AngularJS v1.0.7:
Merci au commentaire de duckeggs pour la solution de travail!
la source
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
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 etclick
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 Event
preventDefault()
:(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
Et dans votre méthode logout ():
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:PS1 :
Certaines réponses suggèrent d'utiliser:
href
est une directive angulaire. Lorsque votre modèle est traité par angulaire, il sera converti enCes deux moyens sont essentiellement les mêmes.
la source
Écrivez juste ng-click avant href .. cela a fonctionné pour moi
la source
Je ne pense pas que vous deviez supprimer "#" de href. Travaux suivants avec Angularjs 1.2.10
la source
Vous pouvez également essayer ceci:
la source
Je vais ajouter pour vous un exemple qui fonctionne pour moi et vous pouvez le modifier à votre guise.
J'ajoute le code ci-dessous dans mon contrôleur.
et pour ma page d'affichage, j'ajoute le code ci-dessous.
la source
Avez-vous essayé de rediriger à l'intérieur de la fonction de déconnexion elle-même? Par exemple, disons que votre fonction de déconnexion est la suivante
Alors tu peux juste avoir
la source
S'il te plaît, vérifie cela
la source
la source
Cela fonctionne pour moi
la source