Vue-Modell nicht aktualisieren
Wenn ich versuche zu aktualisieren meine benutzerdefinierte text-area-Komponente die Modell-Daten this.message='<span id="foo">bar</span>
text und html wird nicht angezeigt, in der htmltextarea-tag, wie es sollte, aber ich kann sehen, dass die Updates angewendet, die in der Vue dev Konsole. Ich habe auch versucht den Wechsel zu einem Objekt statt als string zu haben und mit Vue.set, aber das funktioniert auch nicht.
Irgendwelche Vorschläge, wie man dieses Problem beheben?
Dem Ziel, mit der htmlTextArea
Komponente ist, erhalten die Benutzer text aus dem htmlTextArea-tag (das funktioniert), Bearbeiten Sie diesen text, und binden Sie es zurück zu der textarea, aber mit HTML-Code in es.
Benutzerdefinierte text-area-Komponente:
<template>
<div contenteditable="true" @input="updateHTML" class="textareaRoot"></div>
</template>
<script>
export default {
//Custom textarea
name: 'htmlTextArea',
props:['value'],
mounted: function () {
this.$el.innerHTML = this.value;
},
methods: {
updateHTML: function(e) {
this.$emit('input', e.target.innerHTML);
}
}
}
</script>
Andere Komponente:
<template>
...
<htmlTextArea id="textarea" v-model="message"></htmlTextArea>
...
</template>
<script>
data: {
return {
message: 'something'//this works
}
}
...
methods: {
changeText() {
this.message='<span id="foo">bar</span>'//this does not
}
},
components: {
htmlTextArea
}
</script>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie legen Sie den Wert explizit nach der
value
Requisiten ändern. Sie können Uhr fürvalue
ändern.Ändern Sie die
data
Eigenschaft in einer Funktion, wie Sie es definiert, es ist nicht reaktiv.Wenn Sie jetzt das update der
message
Eigenschaft in der Methode, wird die Komponente entsprechend aktualisieren.Reaktivität in der Tiefe