Ich habe ein Formular erstellt Form Builder (Angular2 Beta 1, TypoScript), dh: es gibt so etwas wie dieses ist in constructor
:Angular2: Form Bauen + asynchrone Datenlade
this.form = this._formBuilder.group({
'username': ['', Validators.required],
'email': ['', Validators.required]
});
Die Form nach oben zeigt, ist alles Nett so weit. Was ich nicht wirklich wirklich bekomme ist, wie ich die Bindung handhabe, wenn ich die Daten (in diesem Fall ein Benutzerobjekt) von einem Remote-Dienst (oder einem anderen asynchronen Lademechanismus) lade.
Was ich versucht habe, ist:
- laden die Daten asynchron in
constructor
oderngOnInit
. Problem: löst eine Ausnahme aus, noch bevor das Laden beginnt ("Eigenschaft kann nicht gelesen werden" von undefiniertem ... ") - Laden Sie die Daten asynchron in
constructor
oderngOnInit
, aber erstellen Sie zuvor ein leeres Formular. Problem: Validierung funktioniert nicht. - Was hätte ich erwartet zu arbeiten: Binden Sie die Formulardaten an Eigenschaften eines
User
Objekts, und legen Sie die Eigenschaften dieses Objekts fest. Problem: keine Ausnahme, aber die Daten werden nicht im Formular angezeigt.
Ich denke, es muss einen klüger/besseren Weg, um dies funktioniert zu bekommen? Ich bin ziemlich neu zu Angular2, so dass ich hoffe, dass die Frage nicht zu dumm ist ...
---- ---- aktualisiert
Zuerst habe ich vergessen zu erwähnen, dass ich ngFormModel
in Form verwenden - in Fall ist es wichtig.
Und @ Thierry: Ich denke, dass "temporäre leeres Objekt mit der Form zu binden" ist, was ich versucht habe zu tun (der dritte Ansatz oben erwähnt), aber was nicht funktioniert. Gerade habe ich versucht, dies:
constructor(private _formBuilder:FormBuilder) {
this.user = new User;
this.user.username = 'abc';
this.form = this._formBuilder.group({
'username': [this.user.username, Validators.required],
});
}
Dies zeigt den Benutzername, aber es funktioniert nicht einmal arbeiten, wenn ich die Linie bewegen, die this.user.username
bis zum Ende des Konstrukteurs setzt - was ich ziemlich überraschend zu finden, wie ich hätte erwartete Datenbindung, um sich darum zu kümmern.
Sind Sie sicher für das temporäre leere Objekt? ;-) Siehe mein Plunkr: https://plnrkr.co/edit/metUkOB7Sqfyr9DtCLR0?p=preview. Die Validierung funktioniert auch nach dem Laden der Daten ... –
Interessant. Vielleicht ist dies ein Problem von "Template Driven" vs "Model Driven" Ang2 Formen. Ich benutze den letzteren Ansatz und habe kein '[(ngModel)]' in der Steuerung - könnte das der Grund dafür sein, dass es hier nicht funktioniert hat? – BlueM
Ja, ich verwende auch einen modellgesteuerten Ansatz. Ohne 'ngModel' müssen Sie alle Kontrollwerte von Hand setzen ... Das ist bei 'ngModel' nicht der Fall: Aktualisieren Sie das globale Objekt und alle gebundenen Eigenschaften werden automatisch aktualisiert ;-) –