代码之家  ›  专栏  ›  技术社区  ›  Patricio Vargas

反应式表单验证器无法工作

  •  0
  • Patricio Vargas  · 技术社区  · 6 年前

    我的输入字段中有一个required和maxLength类型的验证器,我正在尝试在我的HTML中使用最干净的代码。我试着做了以下的事情,但没有成功

    HTML格式

    (这行不通)

    <form [formGroup]="creditCardForm">
          <input type="text" pInputText formControlName="cardHolderName" required maxlength #cardHolderName/>
                <label *ngIf="form.cardHolderName.invalid &&
                (form.cardHolderName.dirty || form.cardHolderName.touched)" class="invalidField">Cardholder name is required</label>
    </form>
    

    TS公司

    form = this.buildCreditCardForm(this.fb).controls;
    .
    .
    buildCreditCardForm(fb: FormBuilder): FormGroup {
       return fb.group({
          cardHolderName: ['', [Validators.required, Validators.maxLength(50)]],
        .
        .
    }
    

    HTML格式 (这个管用,但是太长了,太脏了)

    <form [formGroup]="creditCardForm">
    <input type="text" pInputText formControlName="cardHolderName" required maxlength #cardHolderName/>
            <label *ngIf="fcreditCardForm.controls.cardHolderName.invalid &&
            (creditCardForm.controls.cardHolderName.dirty || creditCardForm.controls.cardHolderName.touched)" class="invalidField">Cardholder
              name is required</label>
    </form>
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Stavm    6 年前

    您混合了反应式验证器和模板验证器。不知道你为什么要把事情复杂化,反应形式很简单。

    Demo 用你的表格:

    <form [formGroup]="creditCardForm">
        <input type="text" formControlName="cardHolderName"/>
        <label *ngIf="creditCardForm.get('cardHolderName').invalid">Cardholder name is required</label>
    </form>
    

    组成部分:

      creditCardForm;
    
      constructor(private fb: FormBuilder) { }
    
      ngOnInit() {
        this.creditCardForm = new FormGroup({
          'cardHolderName': new FormControl(null, [Validators.required, Validators.maxLength(5)])
        });
      }
    

    把它拿走,根据你的需要调整。