当我尝试更新我的自定义文本区域组件的模型数据this.message='<span id="foo">bar</span>
时,文本和html不会显示在htmltextarea标记中,但我可以在Vue开发工具的控制台中看到更新。我也尝试使用Vue.set切换到对象而不是字符串,但这也不起作用。
有关如何解决此问题的任何建议?
htmlTextArea
组件的目标是从htmlTextArea标签获取用户文本(这可行),操作此文本并将其绑定回textarea,但其中包含HTML。
自定义文本区域组件:
<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>
其他组成部分:
<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>
答案 0 :(得分:7)
您需要在value
道具更改后明确设置值。您可以watch更改value
。
<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;
},
watch: {
value(v) {
this.$el.innerHTML = v;
}
},
methods: {
updateHTML: function(e) {
this.$emit("input", e.target.innerHTML);
}
}
};
</script>
答案 1 :(得分:2)
将draw(_:)
属性更改为函数,因为您已定义它不是被动的。
data
现在,当您更新方法中的data () {
return {
message: 'something'//this works
}
}
属性时,组件将相应地更新。