У меня есть 2 ввода в форме, числовой ввод с именем ageMonths и селектор даты с именем dateOfBirth.
Я хочу, чтобы пользователь мог вводить месяцы для возраста или использовать селектор даты, чтобы выбрать дату рождения (dob). Если они вводят dob из селектора даты, я хочу обновить поле месяца до возраста в месяцах. Если они вводят возраст в месяцах, я хочу, чтобы селектор даты перешел на эту дату. Я использую реактивные формы.
Я добавил переменную уровня класса для хранения переключателя, который читается и устанавливается каждый раз, когда значение изменяется для любого элемента управления. Но это работает не так, как ожидалось, я полагаю из-за событий, которые не запускаются в том порядке, в котором я их ожидаю.
Что мне нужно сделать, чтобы эта работа?
Мой код:
ignoreDateUpdate = false;
form: FormGroup;
...
constructor(...){
this.form = new FormGroup({
dateOfBirth: new FormControl({ value: new Date()}),
ageMonths: new FormControl({ value: 0 }),
...
});
...
this.form.get('ageMonths').valueChanges.subscribe(
m => {
if (ignoreDateUpdates) {return};
ignoreDateUpdates = true;
<code to set DateSelectorValue>
ignoreDateUpdates = false;
});
this.form.get('dateOfBirth').valueChanges.subscribe(
dob => {
if (ignoreDateUpdates) {return};
ignoreDateUpdates = true;
<code to set MonthsInput>
ignoreDateUpdates = false;
});
}