Passa a un'altra pagina con un pulsante in angolare 2


112

Sto cercando di passare a un'altra pagina facendo clic su un pulsante ma non funziona. Quale potrebbe essere il problema. Ora sto imparando Angular 2 ed è un po 'difficile per me ora.

//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
prova qualcosa di simile:<button class="btn btn-success pull-right" ><a [routerLink]="[ '.', 'Service/Sign_in' ]"> Add Customer</a></button>
Avnesh Shakya

Risposte:


253

Usalo in questo modo, dovrebbe funzionare:

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

Puoi anche usare in router.navigateByUrl('..')questo modo:

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

Aggiornare

Devi iniettare Routernel costruttore in questo modo:

constructor(private router: Router) { }

solo allora puoi usare this.router. Ricorda anche di importare RouterModulenel tuo modulo.

Aggiorna 2

Ora, dopo Angular v4 puoi aggiungere direttamente l' routerLinkattributo sul pulsante (come indicato da @mark nella sezione commenti) come di seguito -

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

2
posso inviare alcuni dati con esso?
Anuj

12
Non sono sicuro che le cose siano cambiate da quando è stato scritto, ma a partire da ottobre 2018, sembra che tu possa semplicemente mettere l' [routerLink]attributo direttamente sul <button>(il che evita alcuni problemi di stile che possono sorgere quando si avvolge il pulsante in un <a>)
Mark Adelsberger

Allora qual è il modo più pulito? È meglio non esporre il percorso nel markup ma mantenerlo invece nel file dattiloscritto, o il "nuovo" modo con [routerLink]il modello è la strada da percorrere?
Rin e Len

sta a te, IMO, non c'è logica per nascondere il tuo markup nel modello mentre navighi fino a che l'utente può vedere nella pagina successiva. Resto entrambi sono gli stessi immagino
Pardeep Jain

1
Al primo livello in html filecui il componente verrà caricato deve avere un <router-outlet></router-outlet>tag. fare riferimento ad angular.io/api/router/RouterOutlet#description per maggiori dettagli.
Tharusha

36

Puoi usare routerLink nel modo seguente,

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

oppure usa <button [routerLink]="['./url']">nel tuo caso, per maggiori informazioni potresti leggere l'intero stacktrace su github https://github.com/angular/angular/issues/9471

anche gli altri metodi sono corretti ma creano una dipendenza dal file del componente.

Spero che la tua preoccupazione sia risolta.


1
@Ronit Perché non solo: <button type = "button" value = "Add Bulk Inquiry" routerLink = "../ addBulkEnquiry" class = "btn">? Perché stai usando le parentesi quadre?
Andy King

1
@ AndyKing Perché sta usando un'espressione (un array come valore), foo="boo" è come [foo]="'boo'". Forse si vuole leggere stackoverflow.com/questions/43633452/...
PhoneixS

1
Preferisco questa risposta
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']);
};

All'inizio ho fatto qualcosa di simile (usando router.navigate), poi ho cercato altre idee e ora uso routerLink come menzionato in altre risposte. Mi chiedo quale sia meglio, o se sia importante ...
Scott

1

È importante decorare il collegamento del router e il collegamento con parentesi quadre come segue:

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

Dove " / service " in questo caso è l'URL del percorso specificato nel componente di routing.


0

Avere il collegamento del router sul pulsante sembra funzionare bene per me:

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

0

si può cambiare

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

a livello di componente nel costruttore come sotto

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

0

Segui questi passi

Aggiungi import nel tuo componente principale

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

Nello stesso file aggiungi di seguito il codice per il costruttore e il metodo

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

Questo è il .htmlcodice del file

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

Nel app-routing.module.tsfile aggiungi dashboard

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

In bocca al lupo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.