2016-12-02 2 views
1

Ich habe eine eckige 2-Modell-gesteuerte Form, die eine Eigenschaft des Typs "FormArray" hat. Wenn ich Elemente zu diesem Formulararray hinzufüge oder entferne, scheint das Formular selbst keine Änderungen zu registrieren und das Formular wird nicht "schmutzig" gemacht. HierAngular 2 Model-Driven Form: Hinzufügen/Entfernen von Elementen zu FormArray macht kein Formular schmutzig

ist ein Plunker das Problem zeigt: https://plnkr.co/edit/j1S80CmPBF1iHI5ViEia?p=preview

Hier ist die Methode, die ein Element aus der FormArray entfernt:

removeAddress(i: number) { 
    const control = <FormArray>this.myForm.controls['addresses']; 
    control.removeAt(i); 
} 

Gibt es eine andere Art als manuell this.myForm.dirty = true für das Formular Einstellung zu erfassen dass Änderungen an dieser <FormArray> Eigenschaft vorgenommen wurden?

Antwort

1

Normalerweise bedeutet "schmutzig", dass in einem der Felder eine Wertaktualisierung vorgenommen wurde.

Ein Eingang ist schmutzig, nur wenn der Benutzer mit der Eingabe begonnen hat (hat es schmutzig gemacht).

Aber wenn Sie wollen, dass diese zusammen hacken und machen es schmutzig selbst, nachdem Sie ein beliebiges Element hinzufügen oder entfernen:

Wenn Sie das Formular machen wollen schmutzig:

 this.myForm.valueChanges.subscribe(()=>{ 

       this.myForm.markAsDirty(); 
     }); 
+0

Ok. Meinetwegen. Aber sollte die modellgetriebene Form nicht automatisch erkennen, dass eine Veränderung im Modell stattgefunden hat und sich das Formular selbst verschmutzt hat? –

+0

Nein, dreckig bedeutet, dass eine menschliche Hand das Modell schmutzig gemacht hat :) – Milad

+0

Ah .. Gotcha. Vielen Dank! –

0

AngularJS2 das Konzept hinzugefügt zurück der Zwei-Wege-Bindung.

In AngularJS2 müssen Sie explizit angeben, dass das Steuerelement eine Bindung in beide Richtungen hat.

https://angular.io/docs/ts/latest/guide/forms.html

[(ngModel)] = "model.name" name = "name"

Sollten Sie geben, was Sie wollen.

Verwandte Themen