webentwicklung-frage-antwort-db.com.de

Angular2 patchValue Wert in Array einfügen

Ist es so, dass Angular2 FormGroup.patchValue () keine neuen Elemente in ein Array schiebt? 

Zum Beispiel so etwas:

ngOnInit() {

    this.form = this.formBuilder.group({
        animal: [''],
        school: this.formBuilder.group({
            name: [''],
        }),
        students: this.formBuilder.array([this.formBuilder.control('Bob')])
    });

    setTimeout(() => this.form.patchValue({
      animal: 'cat'
      school : {name: 'Fraser'},
      students: ['Bob gets edited', 'This will not show']
    }), 250);

}

Will nur update das erste Element in "students", aber nicht insert das zweite Element.

Was muss ich tun, damit beide Elemente angezeigt werden?

Plunker hier .

16
Chi Chan

.patchValue() aktualisiert nur die vorhandene FormArray, die Struktur Ihres Formularmodells wird dadurch nicht geändert.

patchValue (Wert: any [], {onlySelf, emitEvent} ?: {onlySelf ?: boolean, emitEvent ?: boolean}): void Patches den Wert des FormArray. Es akzeptiert ein Array, das der Struktur des Steuerelements entspricht, und wird versuchen Sie, die Werte den richtigen Steuerelementen in der Gruppe zuzuordnen.

Es akzeptiert sowohl Supersätze als auch Untersätze des Arrays, ohne dass .__ ausgegeben wird. ein Fehler.

Sie müssen ein neues Element Push auf das Array setzen, damit es angezeigt wird.

 this.form.controls['students'].Push(new FormControl('This will not show'));

Dies ist alles in der FormArray Dokumentation https://angular.io/docs/ts/latest/api/forms/index/FormArray-class.html

8
silentsod

Nun, wie Silentsod sagte, ist es nicht möglich. Derzeit verwende ich unten als Alternative: 

        let controlArray = <FormArray>this.form.controls['apps'];           
        this.list.forEach(app => {
                    const fb = this.buildGroup();
                    fb.patchValue(app);
                    controlArray.Push(fb);
            });

Angular Team - Wir benötigen eine neue Funktion, etwa PatchArray (), die aus einem Sammlungs-/Objektgraphen ein Patch erstellt. Es ist ein grundlegender Anwendungsfall. 

15
Manish Jain

Nun, die Lösung, die ich herausgefunden habe, ist:

this.myForm.controls['array'] = this.formBuilder.array(newArray.map(i => this.formBuilder.group(i)));
4
Giovane

Ich hoffe, dies wird dir helfen. Ich habe ein komplexes Objekt, in dem mein Objekt ein Objekt und ein Objekt enthält. Entschuldigung für meine Grammatik. aber ich hoffe, mein code wird ihnen helfen

ngOnInit() {
    this.descriptifForm = this._fb.group({
      name: 'ad',
      descriptifs: this._fb.array([ this.buildForm() ]),
    });

    this._service.getData().subscribe(res => {
      this.descriptifForm.setControl('descriptifs', this._fb.array(res || []));
    });

  }
buildA(): FormGroup {
    return this._fb.group({
      Id: '',
      Groups: this._fb.array([ this.buildB() ]),
      Title: ''
    });
  }

  buildB(): FormGroup {
    return this._fb.group({
      Id: '',
      Fields: this._fb.array([ this.bbuildC() ]),
      Type: ''
    });
  }

  buildC(): FormGroup {
    return this._fb.group({
      Answers: this._fb.array([ this.buildD() ]),
      Code: '',
    });
  }

  buildD(): FormGroup {
    return this._fb.group({
      Data: ''
    });
  }
0
bl2b