Ich versuche zu verstehen, wie ControlValueAccessor genau funktioniert.Angular2 ControlValueAccessor
Ich habe das Verhalten den es mit zwei verschiedenen Steuerungskomponenten untersucht: eine einzige Nummer:
- Die erste Grundwert zu schaffen, ist wohl.
- Die zweite bieten ein komplexes Objekt.
Also kurz gesagt:
class FirstControlComponent implements ControlValueAccessor {
// ...
value:number = 10;
writeValue(value: number) {
this.value = value;
}
// ...
}
class SecondControlComponent implements ControlValueAccessor {
// ...
value:any = {};
writeValue(value: any) {
this.value = value;
}
// ...
}
Die ControlValueAccessor Schnittstelle nur einen 'Setter' angeben: Writevalue, aber keine 'Getter'.
Also, wenn ich ein Control SecondControlComponent binden, so etwas wie:
this.form = this.builder.group({
controlName: this.builder.control(this.theObject) });
und später in der Vorlage:
<second-component ngControl='controlName'> <second-component>
Alles funktioniert ganz gut, weil Writevalue auf init mit einer Referenz genannt wird zu dem vorhandenen theObject-Objekt, so dass das Steuerelement die gleiche Instanz des Objekts ändern (hoffe, ich bin klar)
ABER: Wenn ich genau dasselbe mit FirstControlComponent mache, , weil der Wert nicht als Referenz übergeben wird (weil es ein Grundelement ist), und weil ControlValueAccessor keinen 'Setter' den Wert in meiner Kontrolle und den Wert in meine Hostkomponente wird NICHT synchron gehalten ...
Bedeutet das, dass wir Objekt übergeben müssen und nicht primitiv zu einem benutzerdefinierten Steuerelement, das den ControlValueAccessor implementiert? Ich rate nein, also ich denke, ich muss etwas falsch verstehen. :)
Ich benutze es richtig?
Alle Hinweise sind willkommen!
Danke!
Steuerelemente haben eine Eigenschaft 'updateValue()', um den Wert festzulegen. –
Und ich nehme an, dass updateValue() writeValue() auf der verknüpften Steuerelementkomponente aufrufen wird. Aber was passiert, wenn die Kontrollkomponente selbst ihren Wert ändert? Wie spiegelt sich diese Änderung in dem Steuerelement in dem Formular wider? – Clement
lesen [Nie wieder verwirrt sein bei der Implementierung von ControlValueAccessor in eckigen Formen] (https://blog.angularindepth.com/never-again-be-confused-when-implementing-controlvalueaccessor-in-angular-forms-93b9eee9ee83) –