Pre-Bevölkern Eingabefeld in `FormGroup` - Angular2
Ich bin mit Angular2 - Reaktive Formen. Alles funktioniert gut, bis ich zeigen möchte, eine voreingestellte Wert in eines der Felder im Formular.
Szenario: gibt Es mehrere buttons auf einer Seite und jeder button öffnet ein Formular mit Feldern wie
- Namen
- Nachricht
- Produkt-Code --> Wert für diese gelten bereits als pro item code aus service.
Scheitern Szenario: Produkt-Code Eingabe-Wert stellt sich auf null.
TS Code:
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
queryForm: FormGroup;
constructor(private _productService: ProductService, fb: FormBuilder) {
this.queryForm = fb.group({
'name': [null, Validators.compose([Validators.required, Validators.minLength(5)])],
'email': [
null, [Validators.required, Validators.email]
],
'message': [null,Validators.compose([Validators.required, Validators.minLength(5)])],
'pcode': [
null
],
})
}
HTML-Formular:
<div *ngFor="let item of product">
<form action="#" [formGroup]="queryForm"
(ngSubmit)="submitForm(queryForm.value)" method="post"
novalidate="" class="text-left note" id="f_{{item.productId}}">
[ .... rest of the fields ...]
<div class="form-group hidden">
<input type="hidden " class="form-control " id="pcode " name="pcode"
formControlName="pcode" [value]="item.productCode" />
</div>
<div class="form-group">
<button type="submit" class="btn1" [disabled]="!queryForm.valid">Submit</button>
</div>
</form>
</div>
Wie kann ich das erreichen?
- Beachten Sie, dass Ihre Frage erwähnt, dass Sie mithilfe von Vorlagen-Formulare - aber FormGroup, FormBuilder etc sind für reaktive Formen - was bedeutet, dass die Erstellung und Verwaltung der Formulare sind die Gefahren, die von der Komponente code, nicht deine Vorlage, also dem Ansatz, die Sie beabsichtigen zu verwenden: template oder reaktiv?
- die obige Frage könnte scheinen, wie es ist irrelevant, aber es sei denn, Sie wissen, was Sie tun, das mischen der beiden Ansätze wird nur verwirren Sie
- Oops.. Reaktive Formen
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: Wie wir erfahren, sind Sie brauchen einen
formArray
statt einer einzigenformControl
. So erklären, dass beim erstellen der form:Können Sie
setValue
oderpatchValue
wenn Sie haben Ihre Daten erhalten, wo Sie Durchlaufen die Reaktion und die patch die Werte der Formular-array. Rufen SiepatchValues
-Methode in Ihrer callback (abonnieren).In Ihrer Vorlage Durchlaufen der formarray und auch daran denken, das formgroupname (index):
Demo
Original Antwort:
Sollten Sie immer die form-Werte in der Komponente, nicht die Vorlage. Sie können
patchValue
odersetValue
, wenn Sie erhalten haben, der Wert aus dem service... so können Sie dies tun, e.g innerhalb der callback (abonnieren):Dann brauchen Sie nicht zu verwenden
[value]="item.productCode"
in Ihrer form, dieser Wert wird mit dem Formular-Steuerelement statt.Demo
item
, dann verwenden Sie patchValue, um den Wert, die Sie bekommen haben 🙂http://plnkr.co/edit/3aTYorayo1gwboBeKIcH?p=preview
.. Gabel die plunker... wenn ich mehrere P-Code in json.. dann ist es nicht Wert