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处理程序。
答案 0 :(得分:1)
验证者的内部状态更改时,您必须通知表单。
创建验证器作为指令时。该指令可以具有@Input()
绑定,这些绑定提供用于计算验证器结果的数据。
如果更改了@Input()
绑定,则表单不知道验证器已被修改。
因此,调用registerOnValidatorChange
来将回调函数传递给指令。您保留对该回调的引用,并在更改指令时调用它。这告诉表单再次检查验证器。