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>
Liska Liskor
la source
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>
Pardeep Jain
la source
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.

Ronit Oommen
la source
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']);
};
Aniket
la source
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.

Mwiza
la source
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>
Rob McCabe
la source
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; 
}
Mad Javad
la source
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.

Arvind Chourasiya
la source