-2

我有一个实现 ControlValueAccessor 的自定义控件,并且仅与反应形式一起使用。在自定义控件中,我如何知道何时分配或删除了所需的验证器?

我不想只为必需的属性创建一个@Input,因为它仅用于反应形式。

4

1 回答 1

0

你不必什么都不做。自定义控件验证器是一个“视图”,是具有或不具有验证器的 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 则没有验证器),但我不知道是否需要验证器

注意:在示例中,如果您使用工具按钮,内部验证器也很清晰

于 2019-08-29T19:00:23.440 回答