我有一个实现 ControlValueAccessor 的自定义控件,并且仅与反应形式一起使用。在自定义控件中,我如何知道何时分配或删除了所需的验证器?
我不想只为必需的属性创建一个@Input,因为它仅用于反应形式。
我有一个实现 ControlValueAccessor 的自定义控件,并且仅与反应形式一起使用。在自定义控件中,我如何知道何时分配或删除了所需的验证器?
我不想只为必需的属性创建一个@Input,因为它仅用于反应形式。
你不必什么都不做。自定义控件验证器是一个“视图”,是具有或不具有验证器的 formControl。在这个 stackblitz中看到一个例子
好吧,如果您想知道自定义表单控件中的控件是否有效(这允许我们,例如在自定义表单控件中显示错误),您需要注入 NgControl
一些作者注入删除提供程序并在构造函数中注入 ngControl
constructor(
@Self() public ngControl: NgControl,
) {
this.ngControl.valueAccessor = this;
}
但我更喜欢在 ngOnInit 中使用 - 第一种方法我不知道如何在自定义表单控件中创建验证器 -
ngOnInit(){
this.ngControl = this.injector.get(NgControl);
}
所以,我们可以使用 ngControl.valid、ngControl.errors、ngControl.touched……如果你想知道是否有验证器,你可以询问 ngControl.validator(如果它是 null 则没有验证器),但我不知道是否需要验证器
注意:在示例中,如果您使用工具按钮,内部验证器也很清晰