vue.js динамически добавленная входная v-модель не работает - PullRequest
0 голосов
/ 11 октября 2018

Я гуглил весь день и пока не нашел решения этой проблемы.

Я пытаюсь создать приложение, в которое я могу вставить ввод с v-моделью, которая должна быть реактивной, и значение этого ввода должно быть показанов другом div элементе.Что мне действительно нужно, так это иметь код, в который я мог бы вставить этот ввод с помощью v-модели в любое место моего HTML кода.

Вот пример моего мини-приложения,где все работает хорошо, за исключением того, что v-модель не работает, потому что я пытаюсь вставить его динамически.

Кто-нибудь знает, как заставить это работать?

Вот код:

<template>
<div>
<div id="content"></div>
<button type="button" @click="createNew('typeOne')">Create Type One</button>
<button type="button" @click="createNew('typeTwo')">Create Type Two</button>

<h3 style="color:#000000;" id="formTypeOne0">formTypeOne0</h3>
<h3 style="color:#000000;" id="formTypeOne1">formTypeOne1</h3>
<h3 style="color:#000000;" id="formTypeTwo0">formTypeTwo0</h3>
<h3 style="color:#000000;" id="formTypeTwo1">formTypeTwo1</h3>

</div>
</template>

<script>
export default {
data () {
  return {
    formTypeOne0: '',
    formTypeOne1: '',
    formTypeTwo0: '',
    formTypeTwo1: '',
    numberTypeOne: 0,
    numberTypeTwo: 0
  }
},
methods:{
  createNew(type) {
    if (type === 'typeOne') {
      var html = '<input type="text" :value="formTypeOne' + this.numberTypeOne + '" v-model="formTypeOne' + this.numberTypeOne + '">'
      document.getElementById('content').insertAdjacentHTML('beforeend', html)
      this.numberTypeOne = this.numberTypeOne + 1
    } else if (type === 'typeTwo') {
      var html2 = '<input type="text" :value="formTypeTwo' + this.numberTypeTwo + '" v-model="formTypeTwo' + this.numberTypeTwo + '">'
      document.getElementById('content').insertAdjacentHTML('beforeend', html2)
      this.numberTypeTwo = this.numberTypeTwo + 1
    }
  }
},
watch: {
  formTypeOne0: function(val, oldVal) {
    document.getElementById('formTypeOne0').innerHTML = val
  },
  formTypeOne1: function(val, oldVal) {
    document.getElementById('formTypeOne1').innerHTML = val
  },
  formTypeTwo0: function(val, oldVal) {
    document.getElementById('formTypeTwo0').innerHTML = val
  },
  formTypeTwo1: function(val, oldVal) {
    document.getElementById('formTypeTwo1').innerHTML = val
  }
}

}

1 Ответ

0 голосов
/ 11 октября 2018

Попробуйте этот код, у меня это сработало.Вот HTML:

<template>
<div>
<input id='inputId' type="text" v-model="inputModel">
<button type="button" @click="create()">Create</button>
<div id='division'>  </div>
</div>
</template>

и вот метод:

  create () {
    document.getElementById('division').appendChild(
      document.getElementById('inputId')
    )
  }

v-модель у меня здесь работает.

...