【问题标题】:angular 2 formbuilder conditional validating inputangular 2 formbuilder条件验证输入
【发布时间】:2017-07-26 05:18:12
【问题描述】:

我正在使用 angular 2 formbuilder 创建一个表单,我想根据单选框输入更改有条件地验证输入字段。当我单击百分比单选框时,应验证百分比输入。当我单击金额单选框时,它应该验证金额输入字段。

HTML 代码

(我使用的是材质输入组件)

<md-radio-group formControlName="splitType" (click)="splitTypeClicked()">
      <md-radio-button value="amount">Amount</md-radio-button>
      <md-radio-button value="percentage">Percentage</md-radio-button>
</md-radio-group>
  
<input  mdInput  placeholder="Amount" formControlName="amount"  >
<input  mdInput   placeholder="Percentage" formControlName="percentage"  >

Angular 2 组件

constructor(private fb: FormBuilder){}
   
  ngOnInit() {

    this.splitChargeForm = this.fb.group({
      splitType: ['', Validators.required],
      amount: [''],        //validate when splitType = amount
      percentage: ['']     //validate when splitType = percentage

   });

【问题讨论】:

  • 您在点击时隐藏/显示和禁用/启用输入?
  • 是单击单选按钮时隐藏/显示
  • 好的,我更新我的答案
  • 你可以试试第二种解决方案

标签: angular angular2-formbuilder reactive-forms


【解决方案1】:

将此代码写入ngOnInit() 方法。这有帮助吗

解决方案 1:

 this.splitChargeForm.get('splitType')
      .valueChanges.subscribe((value: string) => {
          if (value === 'amount') {       
               this.splitChargeForm.get('amount').setValidators(Validators.required);
               this.splitChargeForm.get('percentage').clearValidators()
          } else {
              this.splitChargeForm.get('percentage').setValidators(Validators.required);
              this.splitChargeForm.get('amount').clearValidators()
        }
    });

解决方案 2:

// 表单生成器

  this.splitChargeForm = this.fb.group({
      splitType: ['', Validators.required],
      amount: [{value: '', disabled: false}, Validators.required], 
      percentage: [{value: '', disabled: true}, Validators.required]
   });

// 启用和禁用输入(写入 onInit() 方法或 cunstructor)

this.splitChargeForm.get('splitType')
          .valueChanges.subscribe((value: string) => {
              if (value === 'amount') {       
                   this.splitChargeForm.get('amount').enable;
                   this.splitChargeForm.get('percentage').disable();
              } else {
                  this.splitChargeForm.get('percentage').enable();
                  this.splitChargeForm.get('amount').disable()
            }
        });

HTML 应该是这样的

<md-radio-group formControlName="splitType" (click)="splitTypeClicked()">
      <md-radio-button value="amount">Amount</md-radio-button>
      <md-radio-button value="percentage">Percentage</md-radio-button>
</md-radio-group>

<input  mdInput  placeholder="Amount" formControlName="amount" *ngIf="splitChargeForm.value.splitType === 'amount" >
<input  mdInput   placeholder="Percentage" formControlName="percentage"  *ngIf="splitChargeForm.value.splitType === 'percentage" >

【讨论】:

  • 这个答案真的很全面!感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2017-09-14
  • 2023-03-10
  • 2017-12-05
  • 2020-09-30
  • 1970-01-01
相关资源
最近更新 更多