Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angular 2 formbuilder条件验证输入_Angular_Angular2 Formbuilder_Reactive Forms - Fatal编程技术网

angular 2 formbuilder条件验证输入

angular 2 formbuilder条件验证输入,angular,angular2-formbuilder,reactive-forms,Angular,Angular2 Formbuilder,Reactive Forms,我正在使用angular 2 formbuilder创建表单,我希望根据无线框输入更改有条件地验证输入字段。单击“百分比无线框”时,应验证百分比输入。当我单击金额单选框时,它应该验证金额输入字段 HTML代码 (我正在使用材质输入组件) 将此代码写入ngOnInit()方法。这有用吗 解决方案1: this.splitChargeForm.get('splitType') .valueChanges.subscribe((value: string) => {

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

HTML代码 (我正在使用材质输入组件)


将此代码写入
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.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()
        }
    });
//造模工

  this.splitChargeForm = this.fb.group({
      splitType: ['', Validators.required],
      amount: [{value: '', disabled: false}, Validators.required], 
      percentage: [{value: '', disabled: true}, Validators.required]
   });
//启用和禁用输入(写入onInit()方法或cunstructor)

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" >

数量
百分比

单击时隐藏/显示并禁用/启用输入?是单击收音机按钮时隐藏/显示确定我更新我的答案您可以尝试第二种解决方案这是一个非常全面的答案!谢谢你抽出时间。
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()
            }
        });
<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" >