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>

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>

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.


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

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.


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>

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.