Navegue para outra página com um botão no angular 2


112

Estou tentando navegar para outra página clicando em um botão, mas não funciona. Qual poderia ser o problema. Agora estou aprendendo angular 2 e é um pouco difícil para mim agora.

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

Respostas:


253

Use-o assim, deve funcionar:

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

Você também pode usar router.navigateByUrl('..')desta forma:

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

Atualizar

Você tem que injetar Routerno construtor assim:

constructor(private router: Router) { }

só então você será capaz de usar this.router. Lembre-se também de importar RouterModuleem seu módulo.

Atualização 2

Agora, após o Angular v4, você pode adicionar routerLinkatributos diretamente no botão (conforme mencionado por @mark na seção de comentários) como abaixo -

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

2
posso enviar alguns dados com ele?
Anuj,

12
Não tenho certeza se as coisas mudaram desde que isso foi escrito, mas desde outubro de 2018, parece que você pode simplesmente colocar o [routerLink]atributo diretamente no <button>(o que evita alguns problemas de estilo que podem surgir ao envolver o botão em um <a>)
Mark Adelsberger

Então, qual caminho é o mais limpo? É melhor não expor a rota na marcação, mas mantê-la no arquivo datilografado, ou a 'nova' maneira com [routerLink]o modelo é a melhor?
Rin e Len

cabe a você, IMO, não há lógica para ocultar sua marcação no template conforme você vai navegar até o usuário pode ver na próxima página. Descansar ambos são iguais, eu acho
Pardeep Jain

1
No primeiro nível html fileonde o componente vai ser carregado tem que ter <router-outlet></router-outlet>tag. consulte angular.io/api/router/RouterOutlet#description para obter mais detalhes.
Tharusha

36

Você pode usar o routerLink da seguinte maneira,

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

ou use <button [routerLink]="['./url']">no seu caso, para obter mais informações, você pode ler todo o stacktrace no github https://github.com/angular/angular/issues/9471

os outros métodos também estão corretos, mas eles criam uma dependência no arquivo do componente.

Espero que sua preocupação seja resolvida.


1
@Ronit Por que não apenas: <button type = "button" value = "Add Bulk Inquiry" routerLink = "../ addBulkEnquiry" class = "btn">? Por que você está usando colchetes?
Andy King

1
@AndyKing Porque ele está usando uma expressão (um array como valor), foo="boo" é como [foo]="'boo'". Talvez você queira ler stackoverflow.com/questions/43633452/…
PhoneixS

1
Eu prefiro esta resposta
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']);
};

Eu fiz algo parecido com isso no início (usando router.navigate), depois procurei outras idéias e agora uso routerLink conforme mencionado em outras respostas. Eu me pergunto o que é melhor, ou se isso importa ...
Scott

1

É importante decorar o link do roteador e vinculá-lo com colchetes da seguinte maneira:

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

Onde " / serviço ", neste caso, é o URL do caminho especificado no componente de roteamento.


0

Ter o link do roteador no botão parece funcionar bem para mim:

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

0

você pode mudar

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

no nível do componente no construtor como abaixo

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

0

Siga esses passos

Adicionar importação em seu componente principal

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

No mesmo arquivo, adicione o código abaixo para o construtor e o método

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

Este é o seu .htmlcódigo de arquivo

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

No app-routing.module.tsarquivo, adicionar painel

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

Boa sorte.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.