Angular 如何以角度比较formarray中的两个输入字段值?
Html代码:(在这个表格中,我有发货\订单\单位,发货\订单\单位=>假设发货有10个,发货应该小于或等于10。.用户不能输入超过10。.我需要这样验证。)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) { } 在这里,您需要实现该方法,并且需要获取装运订单单位的值,并将其设置为装运订单单位的最
您只需从字段中获取值,并在处理单击事件的位置进行比较:
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();
}