Как обрабатывать зависимости между элементами управления угловой формой?

#angular #angular-reactive-forms

Вопрос:

Я разрабатываю угловую (12) реактивную форму с множеством прямых и косвенных зависимостей между значениями управления формой. Пример: Ставка налога зависит от выбранной страны, даты и выбранного типа квитанции, но ее также можно задать вручную. Изменения налоговой ставки приводят к изменению чистой суммы. Но чистую сумму также можно установить вручную, что приведет к изменению общей суммы. И так далее…

Я пытался справиться с этими зависимостями с помощью подписки на изменения значений элементов управления формой и с событиями размытия компонентов управления, но это приводит к аду обработчика событий, где одно изменение перезаписывает другое.

Каков способ обработки сложных зависимостей между элементами управления угловой реактивной формой чистым, понятным и доступным для обслуживания способом? Я не мог найти подходящего примера для этого.

Комментарии:

1. Больше похоже на логическую проблему, вообще не связанную с формами. Допустим, у вас есть класс с 10 полями и 10 методами changeSmth () — это облегчит ситуацию?

2. Логика действительно сложная, вот о чем мой вопрос. Я понятия не имею, как я мог бы упростить его, потому что он соответствует функциональным требованиям

Ответ №1:

Я решил аналогичные проблемы с зависимостями ввода, написав пользовательские валидаторы, учебник angular называется «Добавление перекрестной проверки в реактивные формы».

https://angular.io/guide/form-validation#adding-cross-validation-to-reactive-forms

Сделав это, вы можете сгруппировать свои валидаторы (при необходимости) и убедиться, что на основе выбора пользователя присутствует правильное дерево зависимостей.

Комментарии:

1. Спасибо вам за ваш ответ! Я не уверен, правильно ли я вас понял — мой вопрос касается не проверки формы, а изменения значения элемента управления формой.

2. Я понимаю ваш вопрос :), вы можете принудительно вводить определенные значения на основе проверки перекрестного поля. Например, если у меня есть поле, которое я установил в США, вы можете использовать шаблон проверки перекрестных полей, чтобы заставить поле налоговой ставки иметь определенное значение, иметь определенные проверки и т. Д.

3. Мне кажется неправильным изменять значение формы в валидаторе, поскольку это не то, что должен делать валидатор. Я не думаю, что это сделало бы все более ясным