Angular Cdk Stepper, как определить, когда добавлен новый шаг

У меня есть кастомный степпер на основе Cdk, но он динамический. Итак, он привязан к FormArray. Когда элемент добавляется в formArray, мне нужно перенаправить на самый новый шаг. CdkStepper, похоже, не вызывает никаких событий при добавлении элемента в коллекцию шагов.

Я пытался подписаться на valueChange в FormArray, но он срабатывает до добавления нового шага.

Вот stackblitz с настройкой.


person Ingó Vals    schedule 12.06.2019    source источник


Ответы (1)


CdkStepper имеет свойство _steps: QueryList<CdkStep>, которое имеет changes: Observable<any> свойство, которое выдает значения как новые шаги, добавленные в CdkStepper.

Однако при использовании в OnInit _steps свойство, похоже, еще не заполнено. Таким образом, использование settimeout для ожидания следующего цикла обнаружения изменений для инициализации _steps решает проблему. В вашем примере измените CustomStepperComponent следующим образом:

ngOnInit() {
  setTimeout(()=>{
    this._steps.changes.subscribe(x => {
      this.selectedIndex = x.length - 1;
    });
  });
}

вот моя рабочая демонстрация

https://stackblitz.com/edit/angular-cdkstepper-formarray-jnftgb

кстати, свойство _steps -

person ysf    schedule 14.06.2019
comment
_steps был заменен в версии 7 на шаги геттера, чтобы лучше инкапсулировать поле. Таким образом, поле никуда не денется, просто со временем может быть скрыто, и вы должны просто начать использовать шаги вместо _steps, чтобы делать то же самое. Внести изменения должно быть легко. - person Rodney S. Foley; 22.07.2019
comment
Привет, ysf и @ Ingó Vals. Я знаю, что этот вопрос немного устарел, но есть ли у кого-нибудь из вас пример рабочей установки TestBed для такого типа Custom Stepper? Реализация была действительно гладкой, но нигде не описана схема тестирования. Издевательство над шагами кажется важной частью, которая просто ускользает от меня ... Если у кого-то из вас есть образец настройки, я с радостью отправлю это как новый вопрос для сладкого увеличения количества повторений. - person Berlin_Bro; 11.02.2020
comment
@Berlin_Bro Боюсь, у меня нет такой настройки TestBed. но в любом случае не стесняйтесь размещать это как вопрос. - person ysf; 21.02.2020