Tenho uma pergunta em relação ao material angular (com Angular 4+). Digamos que em meu modelo de componente eu adicione um <mat-horizontal-stepper>
componente e, em cada etapa <mat-step>
, tenha botões de passo para navegar no componente. Igual a...
<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>
Agora estou me perguntando se é possível remover os botões de cada etapa e tê-los em outro lugar <mat-horizontal-stepper>
em uma posição estática ou mesmo fora do <mat-horizontal-stepper>
e posso navegar para trás e para frente usando o código dentro do meu arquivo typecript do componente. Para se ter uma ideia, gostaria que meu HTML fosse algo assim
<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>
fonte
ViewChild
e vendo como poderia fazer referência ao Stepper - mas você me venceu! Adorei o fato de você ter adicionado a funcionalidade ativar / desativar também! Tenha alguns pontos!ViewChild
também é uma boa opção para obter o stepper. Mas eu preferiria passar uma identificação. Também adicionei aViewChild
solução na demonstração \ o /@ViewChild('stepper', {static: false}) private myStepper: MatStepper;
Por Angular, este valor será padronizado como false no linkAlém @ Faisal resposta 's, esta é a minha opinião sobre fazer o salto MatStepper sem a necessidade de passar a passo nos argumentos.
Isso é útil quando você precisa de mais flexibilidade para manipular o stepper, por exemplo, de um
Service
ou algo mais.HTML:
Arquivo TS:
Aqui está a demonstração do stackblitz .
fonte
Se você deseja navegar programaticamente para a próxima etapa e se estiver usando um stepper linear , siga as etapas abaixo:
stepper
como este:<mat-horizontal-stepper linear #matHorizontalStepper>
mat-step
assim:<mat-step [completed]="isThisStepDone">
mat-step
crie um botão para ir para a próxima etapa como este:<button (click)="next(matHorizontalStepper)">NEXT STEP</button>
.ts
arquivo, declare umaMatStepper
referência chamada stepper :@ViewChild('matHorizontalStepper') stepper: MatStepper;
.ts
arquivo inicializeisThisStepDone
como falso :isThisStepDone: boolean = false;
Em seguida, escreva o método para o botão NEXT STEP chamado
next()
:fonte
setTimeout()
) é necessária devido à propagação de estado viaisThisStepDone
.Você também pode fazer isso especificando o índice real do stepper usando selectedIndex.
stackblitz: https://stackblitz.com/edit/angular-4rvy2s?file=app%2Fstepper-overview-example.ts
HTML:
TS:
fonte
@ViewChild('stepper') private myStepper: MatStepper;
e do quethis.matStepper.next();
na minha função. Funcionando perfeitamente