Da Sie eine reaktive Form verwenden, verwenden Sie sie. Es wird davon abgeraten, ngModel
mit einer reaktiven Form zu verwenden. In der ReactiveFormsModule
ist die ngModel
Direktive nicht einmal enthalten.
Da Sie mehrere Kontrollkästchen haben, sollten Sie einen FormArray
verwenden, um die Werte zu erfassen. Wir könnten dieses FormArray objectiveOfUtilisingServiceControls
nennen.
Dann haben wir eine Methode zum Hinzufügen oder Entfernen der Elemente zum Formular-Array. Wir haben ein Änderungsereignis in der Vorlage, in dem wir die boolean der Checkbox übergeben, das heißt, wenn es aktiviert ist oder nicht, sowie der Artikel wir in der Form Array hinzufügen mögen:
(change)="onChange(objective.value, $event.target.checked)"
Die onChange
Verfahren würde wie folgt aussehen:
onChange(value:string, isChecked: boolean) {
let objectiveOfUtilisingServiceControls =
<FormArray>this.myForm.controls.objectiveOfUtilisingServiceControls;
if(isChecked) {
objectiveOfUtilisingServiceControls.push(new FormControl(value));
} else {
let index =
objectiveOfUtilisingServiceControls.controls.findIndex(x => x.value == value)
objectiveOfUtilisingServiceControls.removeAt(index);
}
}
Wo wir entweder ein neues FormControl
zum Formular Array drücken, oder wenn es nicht markiert ist, die wir in Form von Steuer Form Array entfernen.
Da Sie einen Wert haben, der bereits überprüft wurde, müssen wir ihn auch im Formular-Array hinzufügen. Wir können es tun, nachdem wir die Form aufgebaut haben, die wie folgt aussehen: (fb
bezieht sich auf Formbuilder
)
ngOnInit() {
// build form
this.myForm = this.fb.group({
objectiveOfUtilisingServiceControls: this.fb.array([])
});
//iterate and check which object matches the with the value in 'userInfo.objective'
for (let obj of this.initialInformationDetails.objectiveOfUtilisingService) {
if (obj.value == this.userInfo.objective) {
this.onChange(obj.value, true)
break;
}
}
}
Und wie für den prechecked Wert in der Vorlage, nur verwenden [checked]
:
<label *ngFor="let objective of initialInformationDetails.objectiveOfUtilisingService">
<input type="checkbox" (change)="onChange(objective.value, $event.target.checked)"
[checked]="userInfo.objective == objective.value"/> {{objective.value}}
</label>
und wenn Sie das Formular absenden, haben Sie alle Werte des Formulars in myForm.value
, ändern Sie einfach myForm
zu dem tatsächlichen Formularnamen, den Sie haben.
Sehen Sie diese Frage, es ist ziemlich nah an dem, was Sie versuchen zu tun. https://stackoverflow.com/q/45085453/5556177 – Nehal
Sie haben eine reaktive Form? Es wird davon abgeraten, es zusammen mit ngModel zu verwenden. Ich wundere mich über den formcontrolname, denn wenn Sie mehrere Kontrollkästchen haben möchten, wird es nicht mit einem Formular-Steuerelement funktionieren, da es nur einen Wert erfassen kann, würde ich sagen, Sie möchten ein Formularfeld. – Alex
Hey, wie ist es mit den Antworten gelaufen? Hat Ihnen geholfen oder benötigen Sie weitere Hilfe? :) – Alex