172 votes

Naviguer vers une autre page avec un bouton en angular 2

J'essaie de naviguer vers une autre page en cliquant sur un bouton, mais cela ne fonctionne pas. Quel pourrait être le problème ? Je suis en train d'apprendre Angular 2 et c'est un peu difficile pour moi maintenant.

//Routes/Path in a folder call AdminBoard

export const AdminRoutes: Routes =[

  {
    path: 'dashboard',

    component: AdminComponent,
    children: [
      {path: '', redirectTo: 'Home'},
      {path: 'Home', component: HomeComponent},
      {path: 'Service', component: ServiceComponent},
      {path: 'Service/Sign_in', component:CustomerComponent}

    ]

  }

];

//Button is also in a different folder. Click button to navigate to this page           {path: 'Service/Sign_in', component:CustomerComponent}

  <button class="btn btn-success pull-right" ><a routerLink="/Service/Sign_in"> Add Customer</a></button>

2 votes

Essayez quelque chose comme ça : <button class="btn btn-success pull-right" ><a [routerLink]="[ '.', 'Service/Sign_in' ]"> Add Customer</a></button>

347voto

Pardeep Jain Points 4603

Utilisez-le comme ça, ça devrait marcher :

 <a routerLink="/Service/Sign_in"><button class="btn btn-success pull-right" > Add Customer</button></a>

Vous pouvez également utiliser router.navigateByUrl('..') comme ça :

<button type="button" class="btn btn-primary-outline pull-right" (click)="btnClick();"><i class="fa fa-plus"></i> Add</button>    

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

btnClick= function () {
        this.router.navigateByUrl('/user');
};

Mise à jour

Vous devez injecter Router dans le constructeur comme ceci :

constructor(private router: Router) { }

seulement alors vous pouvez utiliser this.router .

Mise à jour 2

Maintenant, après Angular v4, vous pouvez ajouter directement routerLink sur le bouton (comme mentionné par @mark dans la section des commentaires) comme ci-dessous.

 <button routerLink="/url"> Button Label</button>

2 votes

Est-ce que je peux envoyer des données avec ?

19 votes

Je ne sais pas si les choses ont changé depuis que ceci a été écrit, mais à partir d'octobre 2018, il semble que vous puissiez simplement mettre le [routerLink] directement sur le <button> (ce qui permet d'éviter certains problèmes de style qui peuvent survenir lorsque le bouton est entouré d'une balise <a> )

0 votes

Alors, quel est le moyen le plus propre ? Est-il préférable de ne pas exposer la route dans les balises mais de la conserver dans le fichier typescript, ou bien la "nouvelle" méthode avec [routerLink] dans le modèle est la meilleure solution ?

47voto

Ronit Points 655

Vous pouvez utiliser routerLink de la manière suivante,

<input type="button" value="Add Bulk Enquiry" [routerLink]="['../addBulkEnquiry']" class="btn">

ou utiliser <button [routerLink]="['./url']"> Dans votre cas, pour plus d'informations, vous pouvez lire le stacktrace complet sur github. https://github.com/angular/angular/issues/9471

les autres méthodes sont également correctes mais elles créent une dépendance au fichier du composant.

J'espère que votre problème est résolu.

1 votes

@Ronit Pourquoi ne pas simplement : <button type="button" value="Add Bulk Enquiry" routerLink="../addBulkEnquiry" class="btn"> ? Pourquoi utilisez-vous les crochets ?

1 votes

@AndyKing Parce qu'il utilise une expression (un tableau comme valeur), foo="boo" c'est comme [foo]="'boo'" . Vous voulez peut-être lire stackoverflow.com/questions/43633452/

1 votes

Je préfère cette réponse

14voto

Aniket Points 187
 <button type="button" class="btn btn-primary-outline pull-right" (click)="btnClick();"><i class="fa fa-plus"></i> Add</button>

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

btnClick= function () {
        this.router.navigate(['/user']);
};

0 votes

J'ai fait quelque chose de similaire au début (en utilisant router.navigate), puis j'ai cherché d'autres idées, et maintenant j'utilise routerLink comme mentionné dans d'autres réponses. Je me demande quelle est la meilleure solution, ou si cela a de l'importance...

3voto

Mwizak Points 1543

Il est important que vous décortiquiez le lien du routeur et le lien avec les crochets comme suit :

<a [routerLink]="['/service']"> <button class="btn btn-info"> link to other page </button></a>

Où " /service "Dans ce cas, il s'agit de l'url du chemin spécifié dans le composant de routage.

0 votes

Envelopper un bouton dans une balise d'ancrage semble être une mauvaise pratique

1voto

Rob McCabe Points 420

Le fait d'avoir le lien du routeur sur le bouton semble bien fonctionner pour moi :

<button class="nav-link" routerLink="/" (click)="hideMenu()">
     <i class="fa fa-home"></i> 
     <span>Home</span>
</button>

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