为什么Validator实例中的registerOnValidatorChange会覆盖当前的onChange处理程序?

时间:2018-03-28 15:56:41

标签: angular

Angular中有Validator接口。 Angular中有许多预定义的验证器(如RequiredValidators和stuff)。

为什么Validator实例中的registerOnValidatorChange会覆盖当前的onChange处理程序?

以下是代码示例:https://github.com/angular/angular/blob/4.4.6/packages/forms/src/directives/validators.ts#L95

那么动机是什么?

问题是:我正在尝试更改某些控件的所需状态。我使用了registerOnValidatorChange。之后我尝试了另一个控件(在ng-form元素内)并且我意识到,我的观察者没有工作。就是这样,因为ngForm通过再次调用registerOnValidatorChange方法重新定义了onChange处理程序。

1 个答案:

答案 0 :(得分:1)

验证者的内部状态更改时,您必须通知表单。

创建验证器作为指令时。该指令可以具有@Input()绑定,这些绑定提供用于计算验证器结果的数据。

如果更改了@Input()绑定,则表单不知道验证器已被修改。

因此,调用registerOnValidatorChange来将回调函数传递给指令。您保留对该回调的引用,并在更改指令时调用它。这告诉表单再次检查验证器。