Я использую компонент Angular Material Stepper.
В моем контенте у меня есть отдельные кнопки, которые помогают пользователю перейти к следующему шагу после завершения задачи на текущем шаге.
Я хочу запретить пользователю посещать следующие шаги, нажимая кнопки шагов шагового компонента.
Однако я хочу, чтобы пользователь мог вернуться к предыдущему шагу с помощью кнопок шага шагового компонента.
Я не использую форму внутри степпера. Я видел свойство Linear компонента, но оно не соответствует моим требованиям.
Вкратце, не позволяйте пользователю переходить к «непосещенным» шагам, нажимая кнопки шагов шагового компонента.
2 ответа
Решение, которое я нашел для этой проблемы, - использовать атрибут шага completed
. Обратитесь к строке кода, приведенной ниже:
<mat-step [completed]="isCompleted">
Когда isCompleted
истинно, будет включен следующий шаг.
Примечание. Чтобы это работало, шаговый компонент должен находиться в режиме linear
. Это можно сделать, установив атрибут linear
на шаговом компоненте, например
<mat-horizontal-stepper linear>
Проверьте эту ссылку. Вам нужно использовать линейный степпер.
Шаговый двигатель, помеченный как линейный, требует, чтобы пользователь выполнил предыдущие шаги, прежде чем продолжить. Для каждого шага атрибут stepControl может быть установлен на верхний уровень AbstractControl, который используется для проверки действительности шага.
Пример показан ниже
import { Component, Input } from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {MatIconRegistry} from '@angular/material';
@Component({
selector: 'stepper',
templateUrl: './stepper.component.html'
})
export class StepperComponent {
isLinear = true;
firstFormGroup: FormGroup;
secondFormGroup: FormGroup;
constructor(private _formBuilder: FormBuilder){
}
ngOnInit() {
this.firstFormGroup = this._formBuilder.group({
firstCtrl: ['', Validators.required]
});
this.secondFormGroup = this._formBuilder.group({
secondCtrl: ['', Validators.required]
});
}
}
И HTML это
<mat-vertical-stepper [linear]="isLinear">
<mat-step [stepControl]="firstFormGroup">
<form [formGroup]="firstFormGroup">
<ng-template matStepLabel>Fill out your name</ng-template>
<mat-form-field>
<input matInput placeholder="Last name, First name" formControlName="firstCtrl" required>
</mat-form-field>
<div>
<button mat-button mat-raised-button color="primary" matStepperNext>Next</button>
</div>
</form>
</mat-step>
<mat-step [stepControl]="secondFormGroup">
<form [formGroup]="secondFormGroup">
<ng-template matStepLabel>Fill out your address</ng-template>
<mat-form-field>
<input matInput placeholder="Address" formControlName="secondCtrl" required>
</mat-form-field>
<div>
<button mat-button mat-raised-button color="primary" matStepperPrevious>Back</button>
<button mat-button mat-raised-button color="primary" matStepperNext>Next</button>
</div>
</form>
</mat-step>
<mat-step>
<ng-template matStepLabel icon>Done</ng-template>
You are now done.
<div>
<button mat-button mat-raised-button color="primary" matStepperPrevious>Back</button>
</div>
</mat-step>
</mat-vertical-stepper>
Похожие вопросы
Новые вопросы
angular
Вопросы по Angular (не путать с AngularJS), веб-фреймворку от Google. Используйте этот тег для угловых вопросов, которые не относятся к конкретной версии. Для более старой веб-платформы AngularJS (1.x) используйте тег angularjs.