Angular2 Benutzerdefinierte Komponente - mark als ursprünglichen und unberührten
Ich habe ein template-driven form in Eckigen 2.1 enthält viele standard-Steuerelemente (<input>, <select>
etc) und ein benutzerdefiniertes Steuerelement, das sich selbst enthält mehrere input-Elemente.
Habe ich umgesetzt ControlValueAccessor auf das benutzerdefinierte Steuerelement und es sich ausbreitet, es verändert/berührt/gültige Werte korrekt an das übergeordnete Formular.
Allerdings .. auf das übergeordnete Formular habe ich einen button Speichern, auf die nach dem speichern möchte ich klar der dirty/berührt, Zustand (wie dies wirkt sich auf die css angewendet haben):
save(myForm: NgForm) {
myForm.form.markAsPristine();
myForm.form.markAsUntouched();
}
Diese funktioniert ok für alle Elemente in der obersten Ebene übergeordnetes Formular und das custom control selbst aber die <input>
Felder innerhalb des custom controls sind noch markiert, wie berührt/verschmutzt (und dadurch Erhalt der pre-gespeichert styling).
Gibt es eine Möglichkeit, dass das benutzerdefinierte Steuerelement benachrichtigt werden kann wenn es schmutzig/berührt Zustand verändert, so dass es dann klar, dass es das Kind <input>
Elemente übereinstimmen? Es scheint, dass, wenn die <input>
Elemente werden innerhalb eines benutzerdefinierten Steuerelements, die Sie nicht bekommen, aktualisiert durch Aufrufe markAsPristine/Unberührt auf dem übergeordneten Formular.
Dank!
InformationsquelleAutor Garth Mason | 2016-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, hinzufügen
controls['nameOfControl']
wie dieseDer obige code funktioniert nur für Formular-Steuerelemente.
Folgende zu sein scheint, eine gute work around:
Reset form mit einem neuen Modell UND für die Wiederherstellung der 'unberührten' Klasse Zustand.
durch wechseln der "aktiv" - flag wird verursachen, dass die form entfernt werden und wieder Hinzugefügt, einen tick über NgIf. Ja, es ist eine kleine Arbeit herum, bis Sie beheben kann 🙂
hoffe, das hilft
Yep, hatte ich gesehen, dass Problemumgehung beschrieben, die in der vorherigen version des doco (und SO) zum zurücksetzen des Formulars Werte ... hatte gehofft, um zu vermeiden, dass nur der Haken in dirty/berührt Eigenschaften .. aber vielleicht give it a shot
FormBuilders, FormControls, und FormGroups bieten bieten diese Funktionen out of the box, wenn Sie am Ende in einem hacky Sackgasse.
wenn Sie eine so eine große form Sie können dies so tun.form.reset ().form.markAsPristine()
InformationsquelleAutor bendyourtaxes
Den workaround mit dem flag "aktiv" macht den job, aber ich habe auch einen anderen Weg gefunden.
Auf dem parent form, ich kann auf meine eigene untergeordnete Komponente als ViewChild.
ich.e in der übergeordneten form:
Wenn ich dann speichern Sie das übergeordnete Formular, nennen das Kind direkt.
speichern(myForm: NgForm) {
}
Wo in CustomChildComponent, die ich definiert haben
..
InformationsquelleAutor Garth Mason