Ich habe eine Form wie unten:Angular FormGroup wird nicht aktualisiert seinen Wert unmittelbar nach patchValue oder setValue
createForm() {
this.procedimentoForm = this.formBuilder.group({
nome: ['', Validators.required],
descricao: ['', Validators.required],
conteudo: ['', Validators.required],
solucao: ['', Validators.required],
mesa: ['', Validators.required]
});
}
Die Vorlage:
<form [formGroup]="procedimentoForm" class="ui form">
{{procedimentoForm.value.conteudo}}
<div class="field">
<label>Descrição</label>
<input type="text" placeholder="Descrição" formControlName="descricao">
</div>
<div class="field">
<label>Conteúdo</label>
<tinymce [elementId]="'conteudo'" (onEditorKeyup)="keyupHandlerFunction($event)"></tinymce>
</div>
</form>
Es hat eine benutzerdefinierte Komponente verwendet, die eine TinyMCE Editor implementieren :
import { Component, AfterViewInit, ViewChild, EventEmitter, forwardRef, ElementRef, OnDestroy, Input, Output } from '@angular/core';
import {
ControlValueAccessor,
NG_VALUE_ACCESSOR,
NG_VALIDATORS,
FormControl,
Validator
} from '@angular/forms';
@Component({
selector: 'tinymce',
templateUrl: './tinymce.component.html',
})
export class TinyMCEComponent implements AfterViewInit, OnDestroy {
@Input() elementId: String;
@Output() onEditorKeyup = new EventEmitter();
editor;
ngAfterViewInit() {
tinymce.init({
selector: '#' + this.elementId,
plugins: ['link', 'paste', 'table'],
skin_url: '../assets/skins/lightgray',
setup: editor => {
this.editor = editor;
editor.on('keyup',() => {
const content = editor.getContent();
this.onEditorKeyup.emit(content);
});
}
});
}
ngOnDestroy() {
tinymce.remove(this.editor);
}
}
Der keyup Handler in Form sieht wie folgt aus:
keyupHandlerFunction(event) {
console.log(this.procedimentoForm);
this.procedimentoForm.markAsDirty()
this.procedimentoForm.patchValue({ conteudo: event }, {onlySelf: false, emitEvent: true});
console.log(this.procedimentoForm.value.conteudo);
}
Das Problem ist, kann ich sehen, dass this.procedimentoForm.value.conteudo ändert, weil ich „console.log (this.procedimentoForm.value anmelden. contudo) "im keyup Event Handler. Aber {{procedimentoForm.value.conteudo}} wird nicht aktualisiert, bis ich den Fokus aus dem Editor heraus ändere. Außerdem wird die Validierung erst aktualisiert, wenn sich der Fokus ändert. Ich kann nicht sehen warum.
Ja. Mit detectChanges() im keyup-Handler wurde der Job ausgeführt. Obwohl mir nicht klar ist, was passiert und warum PatchValue die Ansicht nicht aktualisiert, hat Ihre Antwort das Problem gelöst. Vielen Dank. – Alaor
Ich denke, dass Sie in Ihrem Beispiel etwas Code verpasst haben (es ist nicht klar, was "procedimentoForm" ist), deshalb ist es schwierig, weitere Details darüber zu geben, warum es nicht so funktioniert hat, wie Sie gezeigt haben. – Askanison4
Es tut mir leid. Ich habe die Frage mit dem Code aktualisiert, der das Formular erstellt. – Alaor