Ich versuche herauszufinden, wie man die Änderung des Wertes in der Textarea innerhalb der Komponente erkennen kann.VueJs: Textarea Eingabebindung
Für die Eingabe können wir einfach nutzen
<input
:value="value"
@input="update($event.target.value)"
>
jedoch auf TextArea- wird dies nicht funktionieren.
Woran ich arbeite, ist die CKEditor-Komponente, die den Inhalt von wysiwyg aktualisieren soll, wenn der Modellwert der übergeordneten Komponente (die an diese untergeordnete Komponente angehängt ist) aktualisiert wird.
Meine Editor
Komponente sieht derzeit wie folgt aus:
<template>
<div class="editor" :class="groupCss">
<textarea :id="id" v-model="input"></textarea>
</div>
</template>
<script>
export default {
props: {
value: {
type: String,
default: ''
},
id: {
type: String,
required: false,
default: 'editor'
}
},
data() {
return {
input: this.$slots.default ? this.$slots.default[0].text : '',
config: {
...
}
}
},
watch: {
input(value) {
this.update(value);
}
},
methods: {
update(value) {
CKEDITOR.instances[this.id].setData(value);
},
fire(value) {
this.$emit('input', value);
}
},
mounted() {
CKEDITOR.replace(this.id, this.config);
CKEDITOR.instances[this.id].setData(this.input);
this.fire(this.input);
CKEDITOR.instances[this.id].on('change',() => {
this.fire(CKEDITOR.instances[this.id].getData());
});
},
destroyed() {
if (CKEDITOR.instances[this.id]) {
CKEDITOR.instances[this.id].destroy()
}
}
}
</script>
und ich schließe es innerhalb der übergeordneten Komponente
<html-editor
v-model="fields.body"
id="body"
></html-editor>
jedoch bei jedem Modell Wertänderungen des übergeordneten Komponente - den Beobachter nicht ausgelöst hat - Das Fenster des Editors wird nicht aktualisiert.
Ich brauche nur update()
Methode aufgerufen werden, wenn Elternmodell fields.body
aktualisiert wird.
Jeder Zeiger, wie könnte ich es nähern?
Danke @craig_h - Ich werde es versuchen –
Hmm - Ich denke nicht, dass es funktioniert, da Wysiwyg auch "Input" emittieren muss, wenn es Inhalt aktualisiert wird - Im Moment würde es nur 'wysiwyg' aktualisieren, wenn Sie in' editor' eingeben, was ich leider nicht so mache. Danke trotzdem. –
Ah OK, in diesem Fall würde ich vorschlagen, dass Sie [vuex] (https: //vuex.vuejs.org), sodass Sie den freigegebenen Status extrahieren können, anstatt zu versuchen, den Status über die Komponenten selbst auszugeben und zu synchronisieren. –