如何在v-html中进行数据绑定两种方式?

时间:2017-06-05 19:41:15

标签: vue.js vuejs2 vue-component

我有一个元素div,其属性为contenteditable =“true”。这个div的行为类似于textarea元素。

<div v-on:keyup.enter="SendMensage" v-html="msg" contenteditable="true"></div>

我的代码:

data() {
     return {
        msg: '',
     }
},

methods: {
     enviaMensagem() {

        console.log(this.msg);

     }
}

我的问题是数据绑定不起作用。 div中输入的内容不反映变量。有谁知道它能是什么?

1 个答案:

答案 0 :(得分:7)

您需要收听元素的更改,因为v-model仅适用于<textarea><input>。您可以使用@input侦听器来执行此操作。

你得到的标记将被转义。如果您想要取消它,可以使用例如this approach。然后,您实际上在伪textarea字段旁边有标记。那么,为什么不从开头使用<textarea>

new Vue({
  el: '#editor',
  data: {
    msg: ''
  },
  methods: {
    typing: function(el) {
      this.msg = el.target.innerHTML;
    },
    submit: function() {
      console.log("Submitting: ", this.msg);
    }
  }
});
.input {
  display: inline-block;
  vertical-align: middle;
  border: 1px solid black;
  width: 200px;
  height: 100px;
}
.output {
  display: inline-block;
  vertical-align: middle;
  width: 200px;
  height: 100px;
  background: #eee;
}
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.3/vue.min.js"></script>

<div id="editor">
  <div class="input" @input="typing" @keyup.enter="submit" contenteditable="true"></div>
  <div class="output" v-html="msg"></div>
</div>