2

I'm trying to display some html entities in a form text input, but v-model seems escaping them.

Is there something I need to write to make v-model displaying correctly html entities?

my sample code is

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

I know about v-html but I prefer keep using v-model due the automatic two-way binding.

UPDATE

Maybe I expressed myself wrong, I want to display the character, not the html entity, so instead 49.42&#8377; i need to display 49.42₹.

5
  • Take a look at this stackoverflow.com/questions/44376484/… Commented Nov 13, 2018 at 13:50
  • And what does data contain? This fiddle seems to handle HTML just fine in an el-input. Commented Nov 13, 2018 at 14:30
  • @Badgy the user there "falled back" to manually write two-way data binding with v-html, if possible I would like to keep v-model to not writing any method myself to do this Commented Nov 13, 2018 at 14:45
  • @RoyJ data contains a monetized value, i.e.: number followed by currency symbol expressed with html entity Commented Nov 13, 2018 at 14:46
  • You want to interpret the HTML entity in a text input field? Do you expect to be able to reverse-translate from currency symbol to entity notation? Commented Nov 14, 2018 at 0:35

1 Answer 1

3

If you v-model a computed that interprets HTML entities, I think you get the effect you want. You can type in entity values and it will interpret them correctly. However, it might prematurely turn &#8 into a different character; you have to type #8377; and then go back in and insert the &.

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/[email protected]/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>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.