<p contenteditable="true" v-bind="message"></p>
编辑HTML元素时,对象@message
不会更改。使用Vue.js有没有简单的方法呢?
答案 0 :(得分:2)
不幸的是,contenteditable
不适用于Vue
等v-model
绑定,建议您使用medium.js之类的库来构建自己的组件。< / p>
但是,如果你只是想做一些简单的事情并保持数据同步,你可以自己做:
查看模型
new Vue({
el: '#app',
methods: {
updateMessage() {
this.message = this.$refs.message.innerText;
}
},
watch: {
message() {
this.$refs.message.innerText = this.message;
}
},
data: {
message: 'Hello'
}
})
<强> HTML 强>
<p ref="message" contenteditable="true" @keyup="updateMessage" class="editable">{{message}}</p>
正如您所看到的,您必须在使用contenteditable
时自行处理更新DOM。我实际上在这里做的是使用ref来定位满足者,因此我可以通过this.$refs.message.innerText
获取内部文本。我之后添加了一个@keyup
事件,该事件调用updateMessage
方法来更新message
数据属性。然后我添加了一个watcher
来反转这个过程,所以当消息更新时它会更新contenteditable。
这是JSFiddle:https://jsfiddle.net/3ngc9486/
答案 1 :(得分:0)
是的,它有一个双向绑定指令v-model
,但它只适用于输入元素。因此,不要使用p
元素并使用复杂的JS处理它,而是使用带有textarea
的{{1}},它将开箱即用。
v-model
这是一个example。