191 votes

Angular routerLink ne navigue pas vers le composant correspondant

Mon routage dans les applications angular2 fonctionne bien. Mais je vais faire des routeLink basés sur ce :

Voici mon itinéraire :

const routes: RouterConfig = [
    { path:'home' , component: FormComponent  },
    { path:'about', component: AboutComponent },
    { path:'**'   , component: FormComponent  }
];

Et voici les liens que j'ai créés :

<ul class="nav navbar-nav item">
  <li>
    <a routerLink='/home' routerLinkActive="active">Home</a>
  </li>
  <li>
    <a routerLink='/about' routerLinkActive="active">About this</a>
  </li>
</ul>

Je m'attends à ce que, lorsque je clique dessus, il navigue vers le composant correspondant, mais ils ne font rien ?

0 votes

Pouvez-vous essayer [routerLink]='[/home'] ? Quelle version d'Angular2 et quelle version du routeur utilisez-vous ?

0 votes

Cela ne fonctionne pas. Vous êtes sûr de l'emplacement de vos qutations ? Je pense que j'utilise la dernière version d'angular2, mais je ne sais pas comment le vérifier. Je l'ai généré avec ng nouveau . et il devrait être mis à jour

3 votes

Désolé, ça devrait être [routerLink]="['/home']"

500voto

Sam Redway Points 3089

Le code que vous montrez ici est tout à fait correct.

Je pense que votre problème est que vous n'importez pas RouterModule (où RouterLink est déclaré) dans le module qui utilise ce modèle.

J'ai eu un problème similaire et il m'a fallu du temps pour le résoudre car cette étape n'est pas mentionnée dans la documentation.

Allez donc dans le module qui déclare le composant avec ce modèle et ajoutez :

import { RouterModule } from '@angular/router';

puis l'ajouter à vos importations de modules, par exemple.

@NgModule({
  imports: [
    CommonModule,
    RouterModule
  ],
  declarations: [MyTemplatesComponent]
})
export class MyTemplatesModule { }

En plus de disposer des déclarations d'importation correctes, vous aurez également besoin d'un endroit pour afficher ce routerLink, qui se trouve dans le fichier <router-outlet></router-outlet> Il doit donc être placé quelque part dans votre code HTML pour que le routeur sache où afficher ces données.

1 votes

C'est ce que je pensais et oui - vous avez absolument raison dans mon cas aussi !

1 votes

L'ajout du module Router à mes importations a fait l'affaire, merci !

1 votes

Cela fonctionne pour moi. Merci beaucoup !

30voto

zai Points 91

N'oubliez pas de l'ajouter ci-dessous dans votre modèle :

<router-outlet></router-outlet>

16voto

raj_just123 Points 59

Essayez de changer les liens comme ci-dessous :

  <ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this</a>
    </li>
  </ul>

Ajoutez également ce qui suit dans l'en-tête de index.html :

<base href="http://stackoverflow.com/">

9voto

rashfmnb Points 3666

Utilisez-le comme ça pour plus d'informations lisez ceci sujet

<a [routerLink]="['/about']">About this</a>

7 votes

D'après votre lien, son routerLink devrait fonctionner ;-)

0 votes

Cela fonctionne pour "@angular/router": "~3.4.0" . A la vôtre !

2 votes

Oui, la notation entre crochets fonctionne (et c'est une syntaxe valide dans un but précis), mais ce n'est pas une solution à cette question.

3voto

Fernando Del Olmo Points 962

Les liens sont faux, tu dois faire ça :

<ul class="nav navbar-nav item">
    <li>
        <a [routerLink]="['/home']" routerLinkActive="active">Home</a>
    </li>
    <li>
        <a [routerLink]="['/about']" routerLinkActive="active">About this
        </a>
    </li>
</ul>

Vous pouvez lire ceci tutoriel

1 votes

La notation entre parenthèses a un objectif différent et ne résout pas ce problème.

0 votes

C'était ça ! <a [routerLink]="['/home']" routerLinkActive="active">Home</a> Je suivais le tutoriel qui me faisait mettre le routerLinkActive dans la balise < li >. quand je l'ai placé dans la balise < a, cela fonctionne maintenant ! Merci beaucoup !!!! c'est excellent !

0 votes

D'ailleurs, j'ai déjà mis en place toutes les autres balises/éléments suggérés. Maintenant, cette fonctionnalité fonctionne (en quelque sorte). Je dois suivre le reste du tutoriel car je remarque que lorsque je sélectionne d'autres lignes, même si la valeur de la ligne sélectionnée est transmise (je le vois dans l'url), seule la première ligne est rendue. Mais ce sera un autre sujet. Merci encore pour cette aide précieuse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X