Accédez à une autre page avec un bouton angulaire 2


112

J'essaie de naviguer vers une autre page en cliquant sur un bouton mais cela ne fonctionne pas. Quel pourrait être le problème. J'apprends maintenant 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>

1
essayez quelque chose comme ceci:<button class="btn btn-success pull-right" ><a [routerLink]="[ '.', 'Service/Sign_in' ]"> Add Customer</a></button>
Avnesh Shakya

Réponses:


253

Utilisez-le comme ça, devrait fonctionner:

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

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

<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');
};

Mettre à jour

Vous devez injecter Routerdans le constructeur comme ceci:

constructor(private router: Router) { }

alors seulement vous pourrez utiliser this.router. Pensez également à importer RouterModuledans votre module.

Mise à jour 2

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

 <button [routerLink]="'/url'"> Button Label</button>

2
puis-je envoyer des données avec?
Anuj

12
Je ne sais pas si les choses ont changé depuis que cela a été écrit, mais à partir d'octobre 2018, il semble que vous puissiez simplement mettre l' [routerLink]attribut directement sur le <button>(ce qui évite certains problèmes de style qui peuvent survenir lors de l'enroulement du bouton dans un <a>)
Mark Adelsberger

Alors, quelle est la manière la plus propre? Est-il préférable de ne pas exposer la route dans le balisage mais de la conserver à la place dans le fichier dactylographié, ou est-ce que la «nouvelle» manière avec [routerLink]le modèle est la voie à suivre?
Rin and Len

c'est à vous, OMI, il n'y a aucune logique pour cacher votre balisage dans le modèle comme vous allez naviguer vers l'utilisateur peut voir dans la page suivante. Reste les deux sont les mêmes, je suppose
Pardeep Jain

1
Au premier niveau html fileoù le composant va être chargé doit avoir une <router-outlet></router-outlet>balise. veuillez vous référer à angular.io/api/router/RouterOutlet#description pour plus de détails.
Tharusha le

36

Vous pouvez utiliser routerLink de la manière suivante,

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

ou utilisez <button [routerLink]="['./url']">dans votre cas, pour plus d'informations, vous pouvez lire l'intégralité du stacktrace sur github https://github.com/angular/angular/issues/9471

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

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


1
@Ronit Pourquoi pas simplement: <button type = "button" value = "Ajouter une enquête en masse" routerLink = "../ addBulkEnquiry" class = "btn">? Pourquoi utilisez-vous les crochets?
Andy King

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

1
Je préfère cette réponse
HungNM2

13
 <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']);
};

J'ai d'abord fait quelque chose de similaire comme celui-ci (en utilisant router.navigate), puis j'ai cherché d'autres idées, et j'utilise maintenant routerLink comme mentionné dans d'autres réponses. Je me demande ce qui est le meilleur, ou si cela compte ...
Scott

1

Il est important de décorer le lien du routeur et de le lier avec des crochets comme suit:

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

Où « / service » dans ce cas est l'URL du chemin spécifié dans le composant de routage.


0

Avoir le lien du routeur sur le bouton semble fonctionner correctement pour moi:

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

0

vous pouvez changer

    this.router.routeReuseStrategy.shouldReuseRoute = () => false;

au niveau du composant dans le constructeur comme ci-dessous

    constructor(private router: Router) {
            this.router.routeReuseStrategy.shouldReuseRoute = () => false; 
}

0

Suivez ces étapes

Ajouter l'importation dans votre composant principal

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

Dans le même fichier, ajoutez ci-dessous le code pour le constructeur et la méthode

constructor(private route: Router) {}
public Dashbord()
{
 this.route.navigate(['/dashboard']);
}

Ceci est votre .htmlcode de fichier

<button mat-button (click)="Dashbord()">Dashboard</button><br>

Dans le app-routing.module.tsfichier ajouter un tableau de bord

const routes: Routes =
[
  { path: '', pathMatch: 'full' ,component: TestComponent},
  { path: 'dashboard', component: DashboardComponent } 
];

Bonne chance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.