Угловой шаговый материал перед изменением выбора и предотвращение изменения шага для некоторых условий - PullRequest
1 голос
/ 03 апреля 2019

Я использую линейный коврик-степпер.

Работает нормально со следующим.Я делаю вызов API, и если он успешен, тогда я вызываю событие stepper-next вместо использования директивы matStepperNext.

Теперь, когда пользователь заполняет все данные на шаге 1 & , непосредственно нажимайте на каком-либо другом шаг в заголовке r следующего (или любого другого в режиме редактирования записи), затем он будет перенаправлен на следующий шаг, так как форма действительна.

Я хочу сделать вызов службы до что & предотвращает пошаговое изменение до тех пор, пока сервисный вызов не будет успешным , тогда только он должен перенаправить на следующий шаг, в противном случае он не должен.

Я не могу найти какой-либо метод для реализации этой функции в документе.

Может кто-нибудь подсказать мне, что делать.Я не хочу отключать щелчок заголовка.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вам не обязательно обязательно использовать matStepperNext как здесь:
<button mat-button matStepperNext>Next</button>

Но вместо этого вы можете использовать свою собственную функцию следующим образом:

<button mat-button (click)="moveToNextStep()">Next</button>

и в вашем ts-файле получите экземпляр вашего степпера следующим образом:
@ViewChild('stepper') stepper: MatStepper;

Это после того, как вы добавили переменную шаблона в ваш html следующим образом:
<mat-horizontal-stepper [linear]="true" #stepper>

Тогда ваш moveToNextStep() должен выглядеть так:

public moveToNextStep(): void {
   // Here make your api call and your form validation
   if ( your all is good move to next step) {
      this.stepper.next(); // <==== that's how you trigger moving to next step manually
   } else {
      //display some message to the user
   }   
}

И, конечно, вы можете сделать то же самое с предыдущим, вот так:
<button mat-button (click)="moveToPreviousStep()">Previous</button>

public moveToPreviousStep(): void {
    this.stepper.previous();
}

Использование вкладок заголовка:

Если вам нужно использовать шаговый заголовок для переключения между шагами, вы можете использовать selectionChange следующим образом:
<mat-horizontal-stepper #stepper (selectionChange)="onStepChange(stepper.selectedIndex)">

А затем вы добавляете свою функцию, которая обрабатывает вызов API, проверку формы и переход к следующему шагу или нет; как то так:

public onStepChange(index: number): void {
     if ( your all is good move to next step) {
      this.stepper.next(); // <==== that's how you trigger moving to next step manually
   } else {
      //display some message to the user
   }
}
0 голосов
/ 09 апреля 2019

Вы можете попробовать использовать атрибуты editable и completed на mat-step.

См. https://material.angular.io/components/stepper/overview#editable-step

Не рассматривая пример, одним из решений является:

  1. установить атрибут editable на false всех других шагов, пока выполняется сервисный вызов
  2. отслеживать клики на mat-step и сохранять это значение, чтобы вы знали, куда пользователь намеревался пойти
  3. установить атрибут editable в true, если вызов службы успешен или не удается (в зависимости от того, как вы хотите обрабатывать ошибки)
  4. программно перейти к шагу, отслеживаемому в # 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...