2017-05-31 2 views
6

Ich habe solche reaktive Form:Angular 4: setValue Formbuilder leeres Array

constructor(...){ 
    this.form = this.formBuilder.group({ 
    name: ['', Validators.compose([Validators.required, Validators.maxLength(50)])], 
    memes: this.formBuilder.array([ 
     this.initMemes('TrollFace') 
    ]) 
    }); 
} 

initMemes (name?) { 
    return this.formBuilder.group({ 
    id: [''], name: [name] 
    }); 
} 

später kann ich einige weitere hinzufügen memes:

addMemes() { 
    const control = <FormArray>this.form.controls['memes']; 
    control.push(this.initMemes('anyName')); 
} 

und dann, wenn ich Form Werte bekomme ich erhalten:

this.form.controls['memes'].value - hier habe ich Array

Aber es gibt einen Fall, wenn ich diesebraucheauf ein leeres Array zu setzen, wie ist es möglich, zu tun?

Wenn ich stellte es auf diese Weise:

this.form.controls['memes'].setValue([])

ich eine Fehlermeldung anzeigt: Must supply a value for form control at index: 0.

, was ich falsch gemacht?

Antwort

5

versucht, ein paar Dinge: reset(), setControl(), aber die folgenden war die einzige Lösung, die ich eigentlich arbeiten festgestellt, dass das gesamte Array setzt auf [] arbeiteten andere Optionen, aber sie verließen die formgroups an Ort und Stelle, nur die Werte geleert.

So, wie ich es zu arbeiten, war die Form Array zu durchlaufen und jede Form Gruppe mit diesem bestimmten Index in der Schleife löschen:

const control = <FormArray>this.form.controls['memes']; 

for(let i = control.length-1; i >= 0; i--) { 
    control.removeAt(i) 
} 

Wenn es ein besserer Weg, ich bin offen für Vorschläge! :)

+0

Ich denke, es control.controls.removeAt (i) sein sollte. Da das console.log (Steuerelement) ein Array mit Namenssteuerelementen hat, erhalten Sie andernfalls den Fehler "Eigenschaft kann nicht gelesen werden 'aktiviert' von null". – Jassi

3

Versuchen Sie this.myForm.controls['myFormArray'] = this.formBuilder.array([]); mit FormBuilder-Dienst instanziiert in Ihrem Konstruktor.

+0

dies funktionierte für mich in Angular 4 – FireDragon

1

Ich hatte ein ähnliches Problem, wo ich Fehler nach der Aktualisierung meines Formulars erhalten würde, und nach einer Reihe von Untersuchungen und gescheiterten Experimenten fand ich, dass this.myForm.updateValueAndValidity endlich den Trick gemacht.

1

FORM

this.form = this._formB.group({ 
    blocks: this._formB.array([]) 
}); 

1. Methode

let fArray = <FormArray>this.form.controls['blocks']; 
while (fArray.length !== 0) { 
    fArray.removeAt(0) 
} 

2. Methode

this.form.setControl('blocks', this._formB.array([])); 
+0

Bitte fügen Sie einige Erklärung zu Ihrer Antwort, dies hilft zu OP sowie zu anderen Menschen, die hier landen könnte bei der Suche nach ähnlichen Problem. – FilipRistic

Verwandte Themen