Navigieren Sie mit einer Schaltfläche in Winkel 2 zu einer anderen Seite

112

Ich versuche, durch Klicken auf eine Schaltfläche zu einer anderen Seite zu navigieren, aber es funktioniert nicht. Was könnte das Problem sein. Ich lerne jetzt Winkel 2 und es ist jetzt ein bisschen schwierig für mich.

//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
quelle
1
versuchen Sie so etwas:<button class="btn btn-success pull-right" ><a [routerLink]="[ '.', 'Service/Sign_in' ]"> Add Customer</a></button>
Avnesh Shakya

Antworten:

254

Verwenden Sie es so, sollte funktionieren:

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

Sie können auch router.navigateByUrl('..')wie folgt verwenden:

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

Aktualisieren

Sie müssen Routerden Konstruktor wie folgt einfügen :

constructor(private router: Router) { }

Nur dann können Sie verwenden this.router. Denken Sie auch daran, RouterModulein Ihr Modul zu importieren .

Update 2

Jetzt können Sie nach Angular v4 direkt ein routerLinkAttribut auf der Schaltfläche hinzufügen (wie von @mark im Kommentarbereich erwähnt), wie unten -

 <button [routerLink]="'/url'"> Button Label</button>
Pardeep Jain
quelle
2
Kann ich damit Daten senden?
Anuj
12
Ich bin mir nicht sicher, ob sich die Dinge seit dem Schreiben geändert haben, aber ab Oktober 2018 können Sie das [routerLink]Attribut anscheinend direkt auf das setzen <button>(wodurch einige Stylingprobleme vermieden werden, die beim Einwickeln des Buttons in einen auftreten können <a>)
Mark Adelsberger,
Welcher Weg ist also am saubersten? Ist es besser, die Route nicht im Markup verfügbar zu machen, sondern sie stattdessen in der Typoskriptdatei zu behalten, oder ist der "neue" Weg [routerLink]in der Vorlage der richtige Weg?
Rin und Len
Es liegt an Ihnen, IMO, es gibt keine Logik, Ihr Markup in der Vorlage auszublenden, wenn Sie zum Benutzer navigieren, den Sie auf der nächsten Seite sehen können. Ruhe beide sind gleich, denke ich
Pardeep Jain
1
Auf der ersten Ebene, html fileauf der die Komponente geladen werden soll, muss ein <router-outlet></router-outlet>Tag vorhanden sein. Weitere Informationen finden Sie unter angle.io/api/router/RouterOutlet#description .
Tharusha
36

Sie können routerLink folgendermaßen verwenden:

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

Oder verwenden Sie <button [routerLink]="['./url']">in Ihrem Fall für weitere Informationen den gesamten Stacktrace auf github https://github.com/angular/angular/issues/9471

Die anderen Methoden sind ebenfalls korrekt, erzeugen jedoch eine Abhängigkeit von der Komponentendatei.

Hoffe, Ihr Anliegen ist gelöst.

Ronit Oommen
quelle
1
@Ronit Warum nicht einfach: <button type = "button" value = "Massenanfrage hinzufügen" routerLink = "../ addBulkEnquiry" class = "btn">? Warum verwenden Sie die eckigen Klammern?
Andy King
1
@AndyKing Weil er einen Ausdruck (ein Array als Wert) verwendet, foo="boo" ist wie [foo]="'boo'". Vielleicht möchten Sie stackoverflow.com/questions/43633452/…
PhoneixS
1
Ich bevorzuge diese Antwort
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
quelle
Ich habe zuerst so etwas gemacht (mit router.navigate), dann nach anderen Ideen gesucht und jetzt routerLink verwendet, wie in anderen Antworten erwähnt. Ich frage mich, was besser ist oder ob es darauf ankommt ...
Scott
1

Es ist wichtig, dass Sie die Router-Verbindung und die Verbindung mit eckigen Klammern wie folgt dekorieren:

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

Wobei " / service " in diesem Fall die in der Routing-Komponente angegebene Pfad-URL ist.

Mwiza
quelle
0

Die Router-Verbindung auf der Schaltfläche zu haben, scheint für mich gut zu funktionieren:

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

du kannst ändern

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

auf Komponentenebene im Konstruktor wie unten

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

Folge diesen Schritten

Fügen Sie Import in Ihre Hauptkomponente hinzu

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

Fügen Sie in derselben Datei den folgenden Code für Konstruktor und Methode hinzu

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

Dies ist Ihr .htmlDateicode

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

In app-routing.module.tsDatei Dashboard hinzufügen

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

Viel Glück.

Arvind Chourasiya
quelle