【问题标题】:How to handle dependencies between Angular form controls?如何处理 Angular 表单控件之间的依赖关系?
【发布时间】:2021-10-05 13:45:32
【问题描述】:

我正在开发一个 Angular (12) 反应式表单,表单控件值之间有很多直接和间接的依赖关系。 例子: 税率取决于所选国家、日期和所选收据类型,但也可以手动设置。税率的变化触发净额的变化。但也可以手动设置净额,导致毛额发生变化。等等……

我尝试使用表单控件 valueChanges 订阅和控件组件的 on blur 事件来处理这些依赖关系,但这最终会导致一个更改覆盖另一个更改的事件处理程序地狱。

以干净、清晰和可维护的方式处理 Angular 反应式表单控件之间的复杂依赖关系的方法是什么?我找不到合适的例子。

【问题讨论】:

  • 听起来更像是与表单无关的逻辑问题。假设你有一个包含 10 个字段和 10 个 changeSmth() 方法的类——它会让情况变得更容易吗?
  • 逻辑确实很复杂,这就是我的问题所在。我不知道如何简化它,因为它代表了功能要求

标签: angular angular-reactive-forms


【解决方案1】:

我通过编写自定义验证器解决了类似的输入依赖问题,角度教程称为“向反应式表单添加交叉验证”。

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

这样做,您可以对验证器进行分组(如果需要),并确保根据用户的选择存在正确的依赖关系树。

【讨论】:

  • 感谢您的回答!我不确定我是否正确 - 我的问题不是关于表单验证,而是关于表单控件值的更改。
  • 我理解您的问题:),您可以根据跨字段验证强制使用某些值。例如,如果我有设置为 USA 的字段,您可以使用跨字段验证模式来强制税率字段为某个值、进行某些验证等。
  • 我觉得在验证器中更改表单值是不对的,因为这不是验证器应该做的。我不认为这会让整个事情变得更清楚
猜你喜欢
  • 2021-03-12
  • 1970-01-01
  • 2021-09-03
  • 2018-09-23
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 2012-02-08
相关资源
最近更新 更多