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.