我知道使用模板驱动的控制会很容易,但是我正在尝试学习反应形式。我创建了两个不同的表单组,并且可以正常工作。
但是知道我想只用1个表格组。我在互联网上搜索,但对此一无所获。所以我的问题:
是否可以仅使用1个表单组进行2个不同的测试?如果我要编写更多测试,会更容易。较小的代码。
谢谢
我的代码: HTML:
<div class="container">
<form [formGroup]="primForm" (ngSubmit)="onSubmit(primForm.value)" novalidate>
<div class="form-group">
<h3>Primfaktoren</h3>
<mat-form-field>
<input matInput class="form-control" formControlName="zahl" placeholder="Zu prüfende Zahl">
</mat-form-field>
<button type="submit" [disabled]="primForm.pristine || primForm.invalid" class="btn btn-success">Zerlegen</button>
<br>
<div>Die Faktoren sind:
<div style="display:inline" *ngFor="let faktor of faktoren">{{faktor}} </div>
<br>
</div>
</div>
</form>
<form [formGroup]="jahrForm" (ngSubmit)="onSubmit(jahrForm.value)" novalidate>
<div class="form-group">
<h3>Schaltjahrtest</h3>
<mat-form-field>
<input matInput class="form-control" formControlName="jahr" placeholder="Welches Jahr?">
</mat-form-field>
<button type="submit" [disabled]="jahrForm.pristine || jahrForm.invalid" class="btn btn-success">Prüfen</button>
<div *ngIf="antwort">
<p>{{jahrForm.value.jahr}} ist {{antwort}} Schaltjahr</p>
</div>
</div>
</form>
</div>
TS:
import {Component} from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
@Component({
selector: 'app-algos',
templateUrl: './algos.component.html',
styleUrls: ['./algos.component.scss']
})
export class AlgosComponent {
title = 'Mathematische Tests';
primForm: FormGroup;
jahrForm: FormGroup;
submitted = false;
help: number;
ergebnis: number[];
prf: string;
faktoren = [];
antwort: string;
zahl: number;
jahr: number;
constructor(private fb: FormBuilder) {
this.createForm();
}
createForm() {
this.primForm = this.fb.group({
zahl: ['', Validators.min(3)]
});
this.jahrForm = this.fb.group({
jahr: ['', Validators.min(1)]
});
}
onSubmit(object: Object) {
const key = Object.keys(object);
this.submitted = true;
if (key[0] === 'zahl') {
this.help = parseInt(object['zahl'], 10);
this.ergebnis = this.primFaktor(this.help);
} else {
if (key[0] === 'jahr') {
this.help = parseInt(object['jahr'], 10);
this.prf = this.jahrTest(this.help);
}
}
}
primFaktor(zahl: number): number[] {
this.faktoren = [];
let index = 2;
while (zahl !== 1) {
if (zahl % index === 0) {
this.faktoren.push(index);
zahl /= index;
index = 2;
} else {
index++;
}
}
return this.faktoren;
}
jahrTest(jahr: number): string {
this.antwort = '';
if (jahr % 4 === 0 && (jahr % 100 !== 0 || jahr % 400 === 0)) {
this.antwort = 'ein';
} else {
this.antwort = 'kein';
}
return this.antwort;
}
}
答案 0 :(得分:1)
您可以将所有表单放入一个formGroup
this.primForm = new FormGroup(
{
'zahl': new FormControl('', Validators.min(3)),
'jahr': new FormControl('', [Validators.min(3), Validators.required])
});
this.primForm.setValue({
zahl: this.someObject.someValue,
jahr: this.someObject.someValueX
});
this.primForm.controls['zahl'].valid
this.priForm.value.zah1
或
this.priForm.controls['zah1'].value
编码愉快!