将一个控件的验证器绑定到Angular Reactive Forms中的另一个控件的值

时间:2018-02-19 16:43:23

标签: angular angular-reactive-forms reactive-forms

我对Angular 1.6非常熟悉,刚刚开始学习Angular 5并查看反应形式,如果这是一个新手问题,那么道歉。我们的应用程序有许多复杂的验证规则,我可以看到在大多数情况下它们如何更容易用反应式表单实现。我有一些似乎更难的情况,特别是当验证器的输入是来自另一个控件的值时。以下是两个明显的例子:

  • “从”和“到”日期字段,其中“到”字段必须是比“来自”字段更晚的日期
  • “确认密码”字段必须与“密码”字段具有相同的值。

在Angular 1的土地上,我会做这样的事情:

<input ng-model="vm.from" />
<input ng-model="vm.to" must-be-later-than="vm.from" />

<input ng-model="vm.password" />
<input ng-model="vm.confirmPassword" must-be-identical="vm.password" />

我已经为mustBeLaterThan和mustBeIdentical编写了自定义验证器指令,但是我在字段之间有自动绑定,指令只需要写一次。

在Angular 2/4/5反应形式中,似乎我会创建验证器工厂函数,但我不清楚我将传递给它作为除相关FormControl之外的参数,这似乎很脏。我显然可以观察到一个字段中的变化,并在另一个字段中反复销毁和重新创建验证器,但这似乎效率低下并且错综复杂。在这样的场景中是否有更好的约定?

1 个答案:

答案 0 :(得分:0)

我发现了这个惯例(由于我对解决方案的假设,我找不到谷歌搜索它的方式)。您将两个字段放在FormGroup中并向该组添加验证器。