html - Vue 2 原始 HTML 绑定(bind)到文本区域

标签 html data-binding vue.js vuejs2

我正在创建一个在线文本编辑器。我需要能够从 textarea 的标签中获取用户文本,操作此文本并将其绑定(bind)回 textarea,但其中包含 HTML。

例子:

<textarea v-model="someText"></textarea>

在哪里someText设置为:

someText: '<b>bold</b>.. not bold'

并且应该显示如下: 粗体..不粗体

而不是:<b>bold</b>.. not bold

我觉得 textarea 不可能做到这一点标签,但是这样做的方法是什么?

最佳答案

通常您会使用 v-html ,但你是对的,里面 <textarea>该值将是原始值,未经过处理(不会加粗)。

要实现你想要的,也许你可以利用 contenteditable属性创建 <html-textarea> ,如下所示。

Vue.component('html-textarea',{
  template:'<div contenteditable="true" @input="updateHTML"></div>',
  props:['value'],
  mounted: function () {
    this.$el.innerHTML = this.value;
  },
  methods: {
    updateHTML: function(e) {
      this.$emit('input', e.target.innerHTML);
    }
  }
});

new Vue({
  el: '#app',
  data: {
    message: 'H<b>ELLO</b> <i>editable</i> Vue.js!'
  }
});
div[contenteditable] { border: 1px solid lightblue; }
<script src="https://unpkg.com/vue"></script>

<div id="app">
  <html-textarea v-model="message"></html-textarea>
  <hr>
  <div>
    Raw message: 
    <pre>{{ message }}</pre>
  </div>
</div>

关于html - Vue 2 原始 HTML 绑定(bind)到文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49214866/

相关文章:

html - 如何防止 div 离开屏幕?

html - 将 Bootstrap 轮播指示器样式化为点

javascript - 无法在 VUEJS 2 中的 Axios POST 方法中访问 "this"

javascript - 页面加载后从VueJS中的 'created'调用 'methods'函数

html - 当兄弟的 child 出现时的选择器

html - 如何使用 css 将复选框的位置设置为 td 和输入类型文本的中间?

JavaScript 未绑定(bind)

c# - WPF - 数据绑定(bind)时是否正在进行某种隐式转换?

wpf - IObservable<T> 和 INotifyPropertyChanged - 是否存在连接

javascript - 语法错误: Unexpected token < when trying to test with AVA