Javascript 具有初始值的FormGroup和验证器不工作

Javascript 具有初始值的FormGroup和验证器不工作,javascript,angular,Javascript,Angular,我在ts文件中创建了一个表单组: datenForm: FormGroup; ngOnInit(): void { this.datenForm = this.formBuilder.group( { beginDatum: ['29/03/2019', [Validators.required, this.checkMonth]], endDatum: ['29/03/2020', [Validators.required, this.ch

我在ts文件中创建了一个表单组:

datenForm: FormGroup;

ngOnInit(): void {
    this.datenForm = this.formBuilder.group(
      {
        beginDatum: ['29/03/2019', [Validators.required, this.checkMonth]],
        endDatum: ['29/03/2020', [Validators.required, this.checkSomething]],
        username: ['pedro', [Validators.required, this.checkName]],
      },
    );
  }
我在formsgroup中创建了3个值,我想为每个值使用一个验证器,所以我创建了3个验证器checkMonth、checkSomething、checkName

我在ts中创建了验证器:

checkMonth(group: FormGroup) {
    console.log(group.get("beginndatum").value);
  }

checkSomething(group: FormGroup) {
    return false;
  }
在这里,我只想尝试一下验证器(当我知道它是如何工作的时候,我将编写正确的验证器)

在我的html文件中,我这样使用它:

<datepicker
              (datepickerChanged)="changeInfo(beginDatum)"
              #beginDatumId="beginDatum"
              invalid="{{datenForm.get('beginDatum').invalid && datenForm.get('beginDatum').dirty}}"
              error=""
              name="beginDatum"
              value="{{datenForm.get('beginDatum').value}}">
</datepicker>
但我的checkValidator不工作,我可以将return设置为true或false,这不会让我出错

如何使用具有初始值的验证器并将其与组件绑定

  • group()
    方法需要一组子控件。因此,
    beginDatum
    endDatum
    username
    都是
  • 您的模板文件需要访问这些控件。在每个表单控件上使用
    formControlName
    输入,如下所示:
  • checkMonth()
    并且您的每个验证方法都需要一个
    FormGroup
    ,但它们应该需要一个
    FormControl
    ,因为这才是它们真正收到的

  • 顺便说一句,我强烈建议您阅读一些关于和表单的文档,因为您似乎将它们混合了一点。

    如果您将验证程序添加到FormControl,则参数是自己的FormControl(而不是formGroup)。此外,如果一切正常,自定义验证器必须返回null(非false),如果对象或值无效,则必须返回null。谢谢,您还可以检查我的html,因为验证器无效……我不知道您的
    datepicker
    组件,但如果自定义formControl实现得很好,您应该使用
    formControlName=“beginDatum”
    [formControl]=“
    datenForm.get('beginDatum')”。然后您可以忘记
    (日期选择器更改)
    值。Is是javascript中的日期选择器,在函数
    (datepickerChanged)
    中,您需要使用
    this.datenForm.get('beginDatum').setValue(beginDatum.value)
    或类似的函数为formControl赋值
    checkMonth(group: FormGroup) {
        if (group.get("beginndatum") == null) {
          return false;
        }
        return true;
      }