【问题标题】:Vuejs v-model escape automatically html entitiesVuejs v-model 自动转义 html 实体
【发布时间】:2019-04-16 08:46:28
【问题描述】:

我正在尝试在表单文本输入中显示一些 html 实体,但 v-model 似乎在逃避它们。

我需要写些什么来让v-model 正确显示 html 实体吗?

我的示例代码是

<el-input v-model="data" readonly="readonly"></el-input>

我知道v-html,但由于自动双向绑定,我更喜欢继续使用v-model

更新

可能我表达错了,我想显示字符,而不是html实体,所以49.42&amp;#8377;我需要显示49.42₹。

【问题讨论】:

  • data 包含什么? This fiddle 似乎在 el-input 中处理 HTML 就好了。
  • @Badgy 那里的用户“退回”到手动编写与v-html 的双向数据绑定,如果可能的话,我想保持v-model 不自己编写任何方法来执行此操作
  • @RoyJ data 包含货币化价值,即:数字后跟用html实体表示的货币符号
  • 您想在文本输入字段中解释 HTML 实体?您是否希望能够从货币符号反向转换为实体符号?

标签: forms vue.js input html-entities v-model


【解决方案1】:

如果你对一个解释 HTML 实体的计算进行 v-model,我认为你会得到你想要的效果。您可以输入实体值,它会正确解释它们。但是,它可能会过早地将 变成不同的字符;你必须输入#8377;然后返回并插入 &。

new Vue({
  el: '#app',
  data: {
    a: '49.42&#8377;'
  },
  computed: {
    asText: {
      get() {
        return this.toText(this.a);
      },
      set(newValue) {
        this.a = newValue;
      }
    }
  },
  methods: {
    toText(html) {
      const div = document.createElement('div');

      div.innerHTML = html;
      return div.textContent;
    }
  }
})
<link href="//unpkg.com/element-ui@1.0.0-rc.3/lib/theme-default/index.css" rel="stylesheet"/>
<script src="//unpkg.com/vue/dist/vue.js"></script>
<script src="//unpkg.com/element-ui/lib/index.js"></script>

<div id="app">
  <el-input v-model="asText"></el-input>
  {{a}}
  <div v-html="a"></div>
</div>

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 2020-07-15
    • 2018-06-13
    • 2020-09-26
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2019-05-15
    • 2018-11-04
    相关资源
    最近更新 更多