Угловой: сбросить входное значение до предыдущего значения

В Angular 2+ можно ли программно сбросить значение ввода до его предыдущего значения?

У меня есть раскрывающийся список «Выбрать», после чего при выборе значения мне нужно сбросить его значение до предыдущего, если определенная проверка не удалась.

Как я могу добиться того же, используя ngModel (форма шаблона) и formControl (реактивная форма)? (Просто нужно знать, возможно ли это с помощью обоих подходов).

Я понял, что если мы разместим событие ngModelChange перед ngModel в теге select в шаблоне, то в событии ngModelChange мы получим значение ngModel до изменения. Ссылка: https://github.com/angular/angular/issues/11234

Но я думаю, что этот подход не является кратким и временами может сбивать с толку.


person Abhinandan Khilari    schedule 27.01.2019    source источник


Ответы (1)


Да, это возможно с использованием подхода реактивных форм и с помощью оператора rxjs попарно.

Подпишитесь на formControl valueChanges в своем компоненте с помощью операторов rxjs pairwise и startWith

Образец кода :

this.myForm.controls['control1'].valueChanges
  .pipe(startWith(1), pairwise()).subscribe(
    ([prevValue, selectedValue]) => {
      console.log(prevValue); // previous value
      console.log(selectedValue); // new value
    }
 );
} 

Вы также можете проверить работающий DEMO

Примечание. Я использую startWith, потому что при попарном использовании двух значений будут выдаваться значения. (предыдущая и текущая). Поэтому добавьте значение по умолчанию 1 (значение параметра по умолчанию) в startWith.

person Amit Chigadani    schedule 27.01.2019
comment
Благодарим за ответ, но описанная здесь функциональность помечена как ошибка: github.com/angular/ angular / issues / 13129. Поэтому я сомневаюсь, что это будет правильный подход - person Abhinandan Khilari; 28.01.2019
comment
@AbhinandanKhilari Верно, Другой способ - это сделать с операторами rxjs. Также проверьте обновленный ответ и демонстрацию. - person Amit Chigadani; 28.01.2019
comment
Спасибо, думаю сработает, скоро попробую. Просто из любопытства, можно ли сбросить значение с помощью ngModel, используя приложение формы шаблона? - person Abhinandan Khilari; 28.01.2019