Przejdź do innej strony za pomocą przycisku w narożniku 2

112

Próbuję przejść do innej strony, klikając przycisk, ale to nie działa. Jaki może być problem. Uczę się teraz Angular 2 i jest mi teraz trochę ciężko.

//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
źródło
1
spróbuj czegoś takiego:<button class="btn btn-success pull-right" ><a [routerLink]="[ '.', 'Service/Sign_in' ]"> Add Customer</a></button>
Avnesh Shakya

Odpowiedzi:

253

Użyj tego w ten sposób, powinno działać:

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

Możesz również użyć w router.navigateByUrl('..')ten sposób:

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

Aktualizacja

Musisz wstrzyknąć Routerdo konstruktora w następujący sposób:

constructor(private router: Router) { }

tylko wtedy możesz używać this.router. Pamiętaj również o imporcie RouterModuledo swojego modułu.

Zaktualizuj 2

Teraz, po Angular v4 możesz bezpośrednio dodać routerLinkatrybut na przycisku (jak wspomniano przez @mark w sekcji komentarzy), jak poniżej -

 <button [routerLink]="'/url'"> Button Label</button>
Pardeep Jain
źródło
2
czy mogę przesłać za jego pomocą jakieś dane?
Anuj
12
Nie jestem pewien, czy coś się zmieniło od czasu, gdy to zostało napisane, ale od października 2018 wydaje się, że możesz po prostu umieścić [routerLink]atrybut bezpośrednio na <button>(co pozwala uniknąć niektórych problemów ze stylizacją, które mogą pojawić się podczas zawijania przycisku <a>)
Mark Adelsberger
Więc która droga jest najczystsza? Czy lepiej nie ujawniać trasy w znaczniku, ale zamiast tego przechowywać ją w pliku maszynopisu, czy też „nowy” sposób [routerLink]w szablonie jest właściwą drogą?
Rin i Len
to zależy od Ciebie, IMO, nie ma logiki, aby ukryć swoje znaczniki w szablonie, ponieważ masz zamiar przejść do użytkownika, który zobaczy na następnej stronie. Reszta obie są takie same
Pardeep Jain
1
Na pierwszym poziomie, na html filektórym będzie ładowany komponent, musi mieć <router-outlet></router-outlet>tag. więcej informacji można znaleźć w angular.io/api/router/RouterOutlet#description .
Tharusha
36

Możesz użyć routerLink w następujący sposób,

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

lub użyj <button [routerLink]="['./url']">w swoim przypadku, aby uzyskać więcej informacji, możesz przeczytać cały ślad stosu na github https://github.com/angular/angular/issues/9471

inne metody są również poprawne, ale tworzą zależność od pliku składnika.

Mam nadzieję, że problem został rozwiązany.

Ronit Oommen
źródło
1
@Ronit Dlaczego nie tylko: <button type = "button" value = "Dodaj zapytanie zbiorcze" routerLink = "../ addBulkEnquiry" class = "btn">? Dlaczego używasz nawiasów kwadratowych?
Andy King
1
@AndyKing Ponieważ używa wyrażenia (tablicy jako wartości), foo="boo" jest jak [foo]="'boo'". Może chcesz przeczytać stackoverflow.com/questions/43633452/ ...
PhoneixS
1
Wolę tę odpowiedź
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
źródło
Na początku zrobiłem coś podobnego (używając router.navigate), potem szukałem innych pomysłów, a teraz używam routerLink, jak wspomniano w innych odpowiedziach. Zastanawiam się, co jest lepsze, czy też ma to znaczenie ...
Scott
1

Ważne jest, aby ozdobić łącze routera i łącze nawiasami kwadratowymi w następujący sposób:

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

Gdzie „ / service ” w tym przypadku jest adresem URL ścieżki określonym w komponencie routingu.

Mwiza
źródło
0

Wydaje mi się, że posiadanie łącza routera na przycisku działa dobrze:

<button class="nav-link" routerLink="/" (click)="hideMenu()">
     <i class="fa fa-home"></i> 
     <span>Home</span>
</button>
Rob McCabe
źródło
0

możesz się zmienić

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

na poziomie komponentu w konstruktorze, jak poniżej

    constructor(private router: Router) {
            this.router.routeReuseStrategy.shouldReuseRoute = () => false; 
}
Szalony Javad
źródło
0

Wykonaj poniższe czynności

Dodaj import w głównym komponencie

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

W tym samym pliku dodaj poniższy kod dla konstruktora i metody

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

To jest .htmlkod twojego pliku

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

W app-routing.module.tspliku dodaj dashboard

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

Powodzenia.

Arvind Chourasiya
źródło