Tengo una pregunta sobre Angular Material (con Angular 4+). Digamos que en mi plantilla de componente agrego un <mat-horizontal-stepper>
componente, y dentro de cada paso <mat-step>
tengo botones paso a paso para navegar por el componente. Al igual que...
<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>
Ahora me pregunto si es posible quitar los botones de cada paso y tenerlos en otro lugar <mat-horizontal-stepper>
en una posición estática o incluso fuera de él <mat-horizontal-stepper>
y puedo navegar hacia atrás y hacia adelante usando código dentro de mi archivo de mecanografía de componente. Para dar una idea, me gustaría que mi HTML fuera algo como esto
<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>
fuente
ViewChild
y viendo cómo podía hacer referencia al Stepper, ¡pero me has adelantado! ¡Me encanta el hecho de que también agregó la función de deshabilitar / habilitar! ¡Ten algunos puntos!ViewChild
También es una buena opción para conseguir el paso a paso. Pero preferiría pasar una identificación. También agregué unaViewChild
solución en la demostración \ o /Además de la respuesta de @ Faisal , esta es mi opinión sobre cómo hacer que MatStepper salte sin necesidad de pasar el paso a paso en los argumentos.
Esto es útil cuando necesita más flexibilidad para manipular el paso a paso, por ejemplo, desde una
Service
o algo más.HTML:
Archivo TS:
Aquí está la demostración de stackblitz .
fuente
Si desea navegar programáticamente al siguiente paso y si está utilizando un paso a paso lineal , siga los pasos a continuación:
stepper
como esta:<mat-horizontal-stepper linear #matHorizontalStepper>
mat-step
así:<mat-step [completed]="isThisStepDone">
mat-step
cree un botón para ir al siguiente paso como este:<button (click)="next(matHorizontalStepper)">NEXT STEP</button>
.ts
archivo, declare unaMatStepper
referencia denominada paso a paso :@ViewChild('matHorizontalStepper') stepper: MatStepper;
.ts
archivo, inicializarisThisStepDone
como falso :isThisStepDone: boolean = false;
Luego escriba el método para el botón SIGUIENTE PASO llamado
next()
:fuente
setTimeout()
) es necesaria debido a la propagación del estado a través deisThisStepDone
.También puede hacerlo especificando el índice real del paso a paso usando selectedIndex.
stackblitz: https://stackblitz.com/edit/angular-4rvy2s?file=app%2Fstepper-overview-example.ts
HTML:
TS:
fuente
@ViewChild('stepper') private myStepper: MatStepper;
y quethis.matStepper.next();
en mi función. Funcionando perfectamente