Dans Angular 1.x, je peux faire ce qui suit pour créer un lien qui ne fait pratiquement rien:
<a href="">My Link</a>
Mais la même balise navigue vers la base de l'application dans Angular 2. Quel est l'équivalent de cela dans Angular 2?
Edit: Cela ressemble à un bogue dans le routeur Angular 2 et il y a maintenant un problème ouvert sur github à ce sujet.
Je recherche une solution prête à l'emploi ou une confirmation qu'il n'y en aura pas.
<a>
, sans "html"?a
balises. Mais cela semble piraté.Réponses:
Si vous avez Angular 5 ou plus, changez simplement
dans
Un lien sera affiché avec une icône en forme de main lorsque vous le survolerez et que cliquer dessus ne déclenchera aucun itinéraire.
Remarque: si vous souhaitez conserver les paramètres de requête, vous devez définir l'
queryParamsHandling
option surpreserve
:la source
[routerLink]=""
il est rendu comme<a href="null" (click)="myFunction()">My Link</a>
Angular 5 dans Chrome 64.[routerLink]=""
/href="null"
travaille dans IE 11[routerLink]=""
, le texte Cliquez sur moi n'est pas affiché sous forme de lien et n'affiche pas l'icône du curseur de la main.Ce sera la même chose, cela n'a rien de lié
angular2
. C'est une simple balise HTML.Fondamentalement, la
a
balise (d'ancrage) sera rendue par un analyseur HTML.Éditer
Vous pouvez désactiver cela
href
en ayantjavascript:void(0)
dessus pour que rien ne se passe dessus. (Mais son hack). Je sais qu'Angular 1 a fourni cette fonctionnalité hors de la boîte qui ne me semble pas correcte maintenant.Plunkr
Une autre solution pourrait être d'utiliser une
routerLink
directive avec une""
valeur de passage qui finira par générer un blanchref=""
la source
#
ancrage à l'intérieurhref
peut affecter laAngular1
route..peut vous envoyer à la page par défaut (si c'est là)#
dans angulaire 1.x. Je veux un lien qui ne fait rien dans angular2, tout commehref=""
dans angular 1.x.<a href="">My Link</a>
fera donc..mais que se passe-t-il actuellement?href="javascript:void(0);"
fonctionne pour moi.Il existe des moyens de le faire avec angular2, mais je ne suis pas du tout d'accord pour dire qu'il s'agit d'un bug. Je ne suis pas familiarisé avec angular1, mais cela semble être un comportement vraiment erroné même si, comme vous le prétendez, il est utile dans certains cas, mais il est clair que cela ne devrait pas être le comportement par défaut de tout framework.
Mis à part les désaccords, vous pouvez écrire une directive simple qui saisit tous vos liens et vérifier
href
le contenu de et si la longueur de celui-ci est de 0 que vous exécutezpreventDefault()
, voici un petit exemple.Vous pouvez le faire fonctionner dans toute votre application en ajoutant cette directive dans PLATFORM_DIRECTIVES
Voici un plnkr avec un exemple de travail.
la source
pointer-events
c'est le manque de support avec IE ( caniuse ) (je peux le contourner même avec IE11 assez bizarrement), et cela n'empêche pas de cliquer sur le lien depuis la console. J'ai voté pour la réponse @Pankaj parce que c'est la plus simple de mon point de vue, ma réponse est juste un moyen de le faire avec angular2, je pourrais le rendre plus facile mais les sélecteurs css sont limités.Un achor devrait naviguer vers quelque chose, donc je suppose que le comportement est correct lorsqu'il achemine. Si vous en avez besoin pour basculer quelque chose sur la page, c'est plus comme un bouton? J'utilise bootstrap pour pouvoir utiliser ceci:
la source
J'utilise cette solution de contournement avec css:
html
J'espère que cela t'aides
la source
styles.css
fichier de premier niveau du projet Angular et cela fonctionnera très bien!solution de simeyla :
la source
Une solution très simple consiste à ne pas utiliser de balise A - utilisez plutôt un span:
la source
button
élément au cas où vous le souhaiteriezdoSomething
sur la page.<button>
les éléments déclenchent le clic par défaut lorsque laspace
touche est enfoncée. L'utilisation despan
(ou<a>
) supprime cette fonctionnalité - les actions du clavier ne fonctionneront donc pas comme prévuVoici un moyen simple
capturer l'événement bouillonnant et l'abattre
la source
Voici quelques moyens de le faire:
<a href="" (click)="false">Click Me</a>
<a style="cursor: pointer;">Click Me</a>
<a href="javascript:void(0)">Click Me</a>
la source
Dans mon cas, la suppression de l'attribut href résout le problème tant qu'il y a une fonction de clic assignée à un.
la source
Vous avez empêché le comportement par défaut du navigateur. Mais vous n'avez pas besoin de créer une directive pour y parvenir.
C'est simple comme l'exemple suivant:
my.component.html
my.component.ts
la source
Mis à jour pour Angular 5
la source
J'ai 4 solutions pour la balise d'ancrage factice.
4. Si vous utilisez bootstrap:
la source
Je me demande pourquoi personne ne suggère routerLink et routerLinkActive (Angular 7)
J'ai supprimé le href et je l'utilise maintenant. Lors de l'utilisation de href, il allait à l'URL de base ou rechargeait à nouveau la même route.
la source
vous devez empêcher le comportement par défaut de l'événement comme suit.
En html
Dans le fichier ts
la source
Mis à jour pour Angular2 RC4:
En utilisant
la source
La solution vraiment simple est
(click)="(null)"
<a class="btn btn-default" (click)="(null)">Default</a>
la source