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.