angular - 在Angular中使用不同的反应形式文本框进行计算
问题描述
我在 Angular-9 应用程序中有一个表单,包含几个文本框,我的FormGroup对象如下所示:
ngOnInit(): void {
this.initForm();
this.conditionalValidation();
}
initForm() {
this.formCreateNewPlan = this.fb.group({
channel: new FormControl('', { validators: [Validators.required], updateOn: 'blur' }),
template: new FormControl('', { validators: [Validators.required], updateOn: 'blur', }),
name: new FormControl('', {
validators: [
Validators.required, Validators.minLength(2), Validators.pattern(RegexPatterns.AlphaNumeric),], updateOn: 'blur'
}),
description: new FormControl('', {
validators: [Validators.pattern(RegexPatterns.AlphaNumeric)], updateOn: 'blur'
}),
planBasis: new FormControl('', { validators: [Validators.required], updateOn: 'blur' }),
startDate: new FormControl('', { validators: [Validators.required], updateOn: 'blur' }),
endDate: new FormControl('', { validators: [Validators.required], updateOn: 'blur' }),
circulation: [null],
percentResponse: [null],
orders: [null],
units: [null],
unitsPerOrder: [null],
revenuePerOrder: [null],
revenue: [null],
unusualDemandRevenue: [null],
});
}
另外,我正在执行条件验证,如下所示:
conditionalValidation() {
const circulation = this.formCreateNewPlan.get('circulation');
const percentResponse = this.formCreateNewPlan.get('percentResponse');
const orders = this.formCreateNewPlan.get('orders');
const units = this.formCreateNewPlan.get('units');
const unitsPerOrder = this.formCreateNewPlan.get('unitsPerOrder');
const revenuePerOrder = this.formCreateNewPlan.get('revenuePerOrder');
const revenue = this.formCreateNewPlan.get('revenue');
const unusualDemandRevenue = this.formCreateNewPlan.get('unusualDemandRevenue');
this.formCreateNewPlan.get('channel').valueChanges.subscribe(c => {
if (c == "46") {
circulation.setValidators([Validators.required, Validators.pattern(RegexPatterns.Numeric)]);
percentResponse.setValidators([Validators.required, Validators.pattern(RegexPatterns.Numeric)]);
} else {
circulation.clearValidators();
percentResponse.clearValidators();
}
if (c == "64") {
orders.setValidators([Validators.required, Validators.pattern(RegexPatterns.Numeric)]);
units.setValidators([Validators.required, Validators.pattern(RegexPatterns.Numeric)]);
unitsPerOrder.setValidators([Validators.required, Validators.pattern(RegexPatterns.Decimal)]);
revenuePerOrder.setValidators([Validators.required, Validators.pattern(RegexPatterns.Decimal)]);
revenue.setValidators([Validators.required, Validators.pattern(RegexPatterns.Decimal)]);
unusualDemandRevenue.setValidators([Validators.required, Validators.pattern(RegexPatterns.Decimal)]);
} else {
orders.clearValidators();
units.clearValidators();
unitsPerOrder.clearValidators();
revenuePerOrder.clearValidators();
revenue.clearValidators();
unusualDemandRevenue.clearValidators();
}
circulation.updateValueAndValidity();
percentResponse.updateValueAndValidity();
orders.updateValueAndValidity();
units.updateValueAndValidity();
unitsPerOrder.updateValueAndValidity();
revenuePerOrder.updateValueAndValidity();
revenue.updateValueAndValidity();
unusualDemandRevenue.updateValueAndValidity();
});
}
在这里,我想根据TextBox值(更改时)进行一些计算:
- 订单 – 当目录为渠道时,这是一个计算字段(流通 x 响应百分比)。
- 收入 - 这是一个计算字段(订单 x 收入/订单)。
- 单位/订单 - 这是一个计算字段(单位/订单)
如何以反应形式做到这一点?请帮助我。
解决方案
我更喜欢您在要使用其值进行计算的表单字段上使用(输入)事件。
IE
.html
<input type="number" matInput (input)="calculateValues()" formControlName="circulation" />
<input type="number" [min]="0" [max]="100" matInput (input)="calculateValues()" formControlName="percentResponse" />
.ts
calculateValues() {
// check the fields required to make the calculations to avoid NaN errors
if(this.formCreateNewPlan.value.circulation && this.formCreateNewPlan.value.circulation) {
// patch the values on the form
this.formCreateNewPlan.patchValue({
orders: +this.formCreateNewPlan.value.circulation * +this.formCreateNewPlan.value.circulation
});
}
}
推荐阅读
- responsive-design - 图表绘制中的响应不正确
- docker - 无法从 Container Optimized Compute Engine 的私有 GCR 中提取映像
- flutter - 在 Flutter 中,如何在某个 (x,y) 位置找到小部件?
- sql-server - 将文本转换为多列的 SQL Server 大小写表达式
- angular - 如何从 OkObjectResult 获取价值并从 Angular6 订阅?
- python - 在天猫找不到价格的AJAX
- ssh - 主机密钥格式
- design-patterns - 应用服务能否在 DDD 的有界上下文中调用其他应用服务?
- c# - 动态元素命令绑定/INotifyPropertyChanged - TKCustomMap
- azure-devops - VSTS 分支策略可以应用于 GitHub 吗?