Угловой материал - предотвращение перемещения коврика между ступенями
У меня есть mat-horizontal-stepper
где я установил линейное свойство как true. Когда все шаги действительны на данный момент, я могу перейти к предыдущим шагам, щелкнув заголовок или метку. Я не хочу эту собственность.
Мне нужно перемещаться только через кнопки.
Я попытался отключить функцию указателя с:
.mat-horizontal-stepper-header{
pointer-events: none;
}
но это не сработало.
Мне нужно либо прекратить навигацию, щелкнув заголовок, либо запустить функцию щелчка заголовка степпера.
4 ответа
Что вы изначально опубликовали:
.mat-horizontal-stepper-header{
pointer-events: none;
}
работает, пока вы добавляете ::ng-deep
в класс CSS. Как это:
::ng-deep .mat-horizontal-stepper-header {
pointer-events: none !important;
}
Также убедитесь, что вы используете горизонтальный шаговый двигатель вместо вертикального. Это очевидно имеет значение при вызове соответствующего класса CSS.
У меня была такая же проблема, как у вас, и я сделал следующее:
- В html я настроил [редактируемый] и [завершенный] как ложный
<mat-step [completed]="false" [editable]="false">
- В файле.ts соответствующее действие вызовет следующее:
this.stepper.selected.completed = true;
this.stepper.next();
И конечно же, включен линейный режим.
Чтобы получить событие в заголовке, нажмите здесь
<mat-horizontal-stepper (selectionChange)="stepClick($event)" [linear]="isLinear" #stepper="matHorizontalStepper">
В файле ts компонент -
stepClick(ev) {console.log(ev)}
Установить для редактирования значение false для mat-step
<mat-step editable="false"> ... </mat-step>
Чтобы активировать функцию при нажатии на заголовок степпера, вы можете подписаться на MatStepper.selectionChange
, Он излучается при переключении шагов и дает вам информацию о предыдущем шаге и выбранном шаге.
HTML:
<mat-horizontal-stepper #stepper[linear]="true">
<mat-step label="firstStep">
...
</mat-step>
</mat-horizontal-stepper>
TS:
class ExampleComponent implements OnInit {
@ViewChild('stepper') stepper: MatStepper;
ngOnInit() {
this.stepper.selectionChange.subscribe(selection => {
console.log(selection.selectedStep)
console.log(selection.previouslySelectedStep)
}
}
Когда выбранный шаг является последним, вы можете использовать это, чтобы установить editable = false
на всех предыдущих этапах:
this.stepper._steps.forEach(step => step.editable = false);
Я пробовал это, но не сработало.
::ng-deep .mat-horizontal-stepper-header {
pointer-events: none !important;
}
Тогда я попробовал это.
.mat-step-header {
pointer-events: none !important;
}
Это сработало абсолютно нормально.
Благодарю вас