【发布时间】:2019-05-22 19:19:15
【问题描述】:
我正在尝试制作一个类似于 Medium 的文本编辑器。我正在使用内容可编辑的段落标签并将每个项目存储在一个数组中,并使用 v-for 渲染每个项目。但是,我在使用 v-model 将文本与数组绑定时遇到了问题。似乎与 v-model 和 contenteditable 属性有冲突。这是我的代码:
<div id="editbar">
<button class="toolbar" v-on:click.prevent="stylize('bold')">Bold</button>
</div>
<div v-for="(value, index) in content">
<p v-bind:id="'content-'+index" v-bind:ref="'content-'+index" v-model="content[index].value" v-on:keyup="emit_content($event)" v-on:keyup.delete="remove_content(index)" contenteditable></p>
</div>
在我的脚本中:
export default {
data() {
return {
content: [{ value: ''}]
}
},
methods: {
stylize(style) {
document.execCommand(style, false, null);
},
remove_content(index) {
if(this.content.length > 1 && this.content[index].value.length == 0) {
this.content.splice(index, 1);
}
}
}
}
我没有在网上找到任何答案。
【问题讨论】:
-
通过修改vue的源码,我们可以添加高效的v-model contentEditable。这是代码codepen.io/muthu32/pen/oNvGyQX
-
@MuthuKumar。很好,而且有效!但它确实应该集成到 Vue 中。修改源码有点脆弱。
-
@marlar 这是更新后的代码,无需修改源代码。 codepen.io/muthu32/full/qBWvaYq
-
@Soubriquet,你有没有尝试将组件(例如,图像)插入到 contenteditable 中?
标签: javascript vue.js contenteditable