Ich habe eine Frage zu Angular Material (mit Angular 4+). Angenommen, ich füge in meiner Komponentenvorlage eine <mat-horizontal-stepper>
Komponente hinzu und habe in jedem Schritt Schrittschaltflächen <mat-step>
zum Navigieren in der Komponente. Wie so ...
<mat-horizontal-stepper>
<mat-step>
Step 1
<button mat-button matStepperPrevious type="button">Back</button>
<button mat-button matStepperNext type="button">Next</button>
</mat-step>
<mat-step>
Step 2
<button mat-button matStepperPrevious type="button">Back</button>
<button mat-button matStepperNext type="button">Next</button>
</mat-step>
<mat-step>
Step 3
<button mat-button matStepperPrevious type="button">Back</button>
<button mat-button matStepperNext type="button">Next</button>
</mat-step>
</mat-horizontal-stepper>
Jetzt frage ich mich, ob es möglich ist, die Schaltflächen aus jedem Schritt zu entfernen und sie an <mat-horizontal-stepper>
einer anderen Stelle in einer statischen Position oder sogar außerhalb der zu platzieren, <mat-horizontal-stepper>
und ich kann mithilfe von Code in meiner Komponententypskriptdatei hin und her navigieren. Um eine Idee zu geben, möchte ich, dass mein HTML so etwas ist
<mat-horizontal-stepper>
<mat-step>
Step 1
</mat-step>
<mat-step>
Step 2
</mat-step>
<mat-step>
Step 3
</mat-step>
<!-- one option -->
<div>
<button mat-button matStepperPrevious type="button">Back</button>
<button mat-button matStepperNext type="button">Next</button>
</div>
</mat-horizontal-stepper>
<!-- second option -->
<div>
<button (click)="goBack()" type="button">Back</button>
<button (click)="goForward()" type="button">Next</button>
</div>
quelle
ViewChild
und gesehen, wie ich auf den Stepper verweisen kann - aber du hast mich geschlagen! Ich liebe die Tatsache, dass Sie auch die Deaktivierungs- / Aktivierungsfunktion hinzugefügt haben! Habe ein paar Punkte!ViewChild
ist auch eine gute Option, um den Stepper zu bekommen. Aber ich würde es vorziehen, einen Ausweis zu übergeben. Ich habe auchViewChild
Lösung in der Demo \ o /@ViewChild('stepper', {static: false}) private myStepper: MatStepper;
Per Angular wird dieser Wert in Angular 9+ linkZusätzlich zu @ Faisals Antwort ist dies meine Einstellung, den MatStepper zum Springen zu bringen, ohne den Stepper in den Argumenten übergeben zu müssen.
Dies ist hilfreich, wenn Sie mehr Flexibilität bei der Manipulation des Steppers benötigen, z. B. von einem
Service
oder etwas anderem.HTML:
TS-Datei:
Hier ist die Stackblitz-Demo .
quelle
Wenn Sie programmgesteuert zum nächsten Schritt navigieren möchten und einen linearen Schritt verwenden, führen Sie die folgenden Schritte aus:
stepper
solche:<mat-horizontal-stepper linear #matHorizontalStepper>
mat-step
wie folgt :<mat-step [completed]="isThisStepDone">
mat-step
Erstellen Sie von innen eine Schaltfläche, um zum nächsten Schritt zu gelangen:<button (click)="next(matHorizontalStepper)">NEXT STEP</button>
.ts
Datei deklarieren Sie eineMatStepper
Referenz mit dem Namen stepper :@ViewChild('matHorizontalStepper') stepper: MatStepper;
.ts
Datei initialisieren Sie außerdemisThisStepDone
als false :isThisStepDone: boolean = false;
Schreiben Sie dann die Methode für die Schaltfläche NEXT STEP mit dem Namen
next()
:quelle
setTimeout()
) wird aufgrund der Zustandsausbreitung über benötigtisThisStepDone
.Sie können dies auch tun, indem Sie den ausgewählten Index des Steppers mit selectedIndex angeben.
stackblitz: https://stackblitz.com/edit/angular-4rvy2s?file=app%2Fstepper-overview-example.ts
HTML:
TS:
quelle
@ViewChild('stepper') private myStepper: MatStepper;
und alsthis.matStepper.next();
in meiner Funktion. Funktioniert perfekt