Angular 如何以角度比较formarray中的两个输入字段值?

Angular 如何以角度比较formarray中的两个输入字段值?,angular,angular-reactive-forms,Angular,Angular Reactive Forms,Html代码:(在这个表格中,我有发货\订单\单位,发货\订单\单位=>假设发货有10个,发货应该小于或等于10。.用户不能输入超过10。.我需要这样验证。) 您只需从字段中获取值,并在处理单击事件的位置进行比较: const a = this.form.controls['a'].value const b = this.form.controls['b'].value if(a >= b) { } 在这里,您需要实现该方法,并且需要获取装运订单单位的值,并将其设置为装运订单单位的最

Html代码:(在这个表格中,我有发货\订单\单位,发货\订单\单位=>假设发货有10个,发货应该小于或等于10。.用户不能输入超过10。.我需要这样验证。)


您只需从字段中获取值,并在处理单击事件的位置进行比较:

const a = this.form.controls['a'].value
const b = this.form.controls['b'].value

if(a >= b) { }

在这里,您需要实现该方法,并且需要获取
装运订单单位
的值,并将其设置为
装运订单单位
的最大值

通过使用方法,您可以进行如下验证:

this.formGroup.controls.shipping_order_units.setValidators(Validators.compose([Validators.required, Validators.max(this.formGroup.controls.shipment_order_units.value)])); 
因此component.html文件

<mat-toolbar color="primary">
  <span class="fill-remaining-space">My Reactive Form with Material</span>
</mat-toolbar>

<div class="container" *ngIf="!post; else forminfo" novalidate> 
  <form [formGroup]="formGroup" (ngSubmit)="onSubmit(formGroup.value)" class="form">

      <mat-form-field>
        <input matInput type="number" pattern="[0-9]*" placeholder="Shipping order product quantity" formControlName="shipment_product_order_qty" readonly>
      </mat-form-field>

        <span *ngIf="formGroup.controls.shipment_product_order_qty && formGroup.controls.shipment_product_order_qty.errors">
        <mat-error *ngIf="formGroup.controls.shipment_product_order_qty.errors.required">
          Shipping Product Order quantity is required
        </mat-error>
        </span>

      <mat-form-field>
        <input matInput type="number" pattern="[0-9]*" placeholder="Shipment Order Units"
            formControlName="shipment_order_units" readonly>
      </mat-form-field>


      <mat-form-field>
          <input matInput type="number" pattern="^[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*$" max="5" placeholder="Shipping Order Units"
              formControlName="shipping_order_units" >
      </mat-form-field>

    <span *ngIf="formGroup.controls.shipping_order_units && formGroup.controls.shipping_order_units.errors">
      <mat-error *ngIf="formGroup.controls.shipping_order_units.errors.max"> Shipping Order Units value should be less than or equal to {{formGroup.controls.shipment_order_units.value}} </mat-error>
      <mat-error *ngIf="formGroup.controls.shipping_order_units.errors.required">
        Shipping Order Units is required
      </mat-error>
    </span>
  </form>
</div>
在这里,要将产品数量设置为
10
shipping\u order\u units
的多个,您可以检查并且可以订阅并设置数量的值,如果
shipping\u order\u units
有效

  this.formGroup.get('shipping_order_units').valueChanges
  .subscribe(val => {
    if(!this.formGroup.get('shipping_order_units').errors){
    this.formGroup.get('shipment_product_order_qty').setValue(this.formGroup.get('shipping_order_units').value * 10);
    } else {
      this.formGroup.get('shipment_product_order_qty').setValue('');
    }
  }


用于(假设i=0;我想这就是你想要的??将
发货订单单位
的值设置为
发货订单单位
的最大值。是的,我尝试过这个方法。它不起作用。你的回答不足以解决我的问题。@Rekha,你能看看我在上面的评论中提供的stackblitz并让我知道吗这就是你想要的。@ManirajMurugan,非常感谢,,,你的解决方案非常有效。。我还需要一个帮助。。在该装运数量字段中,应根据装运订单单位进行更改。。例如,装运单位为5,因此装运数量应更改50。。它应乘以10。。你能做到吗?@Rekha,我已添加了w作为答案通过根据您所说的条件更新数量的功能..我已经尝试在代码中实现此逻辑..但是我得到了“无法读取未定义的属性'setValidators'”错误..无论何时添加解决方案,您都需要用相关细节进行解释。。
<mat-toolbar color="primary">
  <span class="fill-remaining-space">My Reactive Form with Material</span>
</mat-toolbar>

<div class="container" *ngIf="!post; else forminfo" novalidate> 
  <form [formGroup]="formGroup" (ngSubmit)="onSubmit(formGroup.value)" class="form">

      <mat-form-field>
        <input matInput type="number" pattern="[0-9]*" placeholder="Shipping order product quantity" formControlName="shipment_product_order_qty" readonly>
      </mat-form-field>

        <span *ngIf="formGroup.controls.shipment_product_order_qty && formGroup.controls.shipment_product_order_qty.errors">
        <mat-error *ngIf="formGroup.controls.shipment_product_order_qty.errors.required">
          Shipping Product Order quantity is required
        </mat-error>
        </span>

      <mat-form-field>
        <input matInput type="number" pattern="[0-9]*" placeholder="Shipment Order Units"
            formControlName="shipment_order_units" readonly>
      </mat-form-field>


      <mat-form-field>
          <input matInput type="number" pattern="^[1-9][0-9]*(\.[0-9]+)?|0+\.[0-9]*[1-9][0-9]*$" max="5" placeholder="Shipping Order Units"
              formControlName="shipping_order_units" >
      </mat-form-field>

    <span *ngIf="formGroup.controls.shipping_order_units && formGroup.controls.shipping_order_units.errors">
      <mat-error *ngIf="formGroup.controls.shipping_order_units.errors.max"> Shipping Order Units value should be less than or equal to {{formGroup.controls.shipment_order_units.value}} </mat-error>
      <mat-error *ngIf="formGroup.controls.shipping_order_units.errors.required">
        Shipping Order Units is required
      </mat-error>
    </span>
  </form>
</div>
export class AppComponent {

  formGroup: FormGroup;
  titleAlert: string = 'This field is required';
  post: any = '';

  constructor(private formBuilder: FormBuilder) { }

  ngOnInit() {
    this.createForm();
  }

  createForm() {

    this.formGroup = this.formBuilder.group({
      'shipment_product_order_qty': [, [Validators.required]],
      'shipment_order_units': [10, Validators.required],
      'shipping_order_units': ['', [Validators.min(0)]]
    });

    this.formGroup.controls.shipping_order_units.setValidators(Validators.compose([Validators.required, Validators.max(this.formGroup.controls.shipment_order_units.value)]));      

  this.formGroup.get('shipping_order_units').valueChanges
  .subscribe(val => {
    if(!this.formGroup.get('shipping_order_units').errors){
    this.formGroup.get('shipment_product_order_qty').setValue(this.formGroup.get('shipping_order_units').value * 10);
    } else {
      this.formGroup.get('shipment_product_order_qty').setValue('');
    }
  }
);
}

}
  this.formGroup.get('shipping_order_units').valueChanges
  .subscribe(val => {
    if(!this.formGroup.get('shipping_order_units').errors){
    this.formGroup.get('shipment_product_order_qty').setValue(this.formGroup.get('shipping_order_units').value * 10);
    } else {
      this.formGroup.get('shipment_product_order_qty').setValue('');
    }
  }
   for(let i = 0; i<this.orderNumArray.length; i++){ 
     this.orderNumArray.at(i).get('shipping_order_units')
       .setValidators(Validators.compose( [Validators.required, 
         Validators.max(this.orderNumArray.at(i).get('shipment_order_units').value)])); 
         this.packForm.updateValueAndValidity(); 
      }