Vuejs:多个输入中的v-model数组

新手上路,请多包涵

我有一个附加了 v-model 的输入文本字段,每次有人点击“添加”按钮时,都会将另一个输入文本添加到 DOM 中,并附加相同的 v-model。我以为我会得到一个 v-model 值的数组,但它只获取第一个 v-model 输入的值:

 <div id="app">
  <div id="references">
    <input v-model="references" type="text">
  </div>
  <button @click="addReference">Add</button>
</div>

我附加到 dom 的 html 是由 addReference 方法触发的:

 addReference: function(e) {
  e.preventDefault();
  console.log(this.references);
  var inputEl = '<input v-model="references" type="text">';
  $('#references').append(inputEl);
}

这是 Vuejs 做不到的吗?有没有用 Vuejs 从动态 dom 元素收集值的不同方法?

 new Vue({
  el: "#app",
  data: {
    references: "text"
  },
  methods: {
    addReference: function(e) {
      e.preventDefault();
      console.log(this.references);
      var inputEl = '<input v-model="references" type="text">';
      $('#references').append(inputEl);
    }
  }
})
 input {
  display: block;
  margin: 1px;
}
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="app">
  <div id="references">
    <input v-model="references" type="text">
  </div>
  <button @click="addReference">Add</button>
</div>

原文由 jlos 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 533
2 个回答

您正在考虑 DOM,这是一个很难改掉的习惯。 Vue 建议你先处理它的数据。

在您的确切情况下很难说,但我可能会使用 v-for 并制作一个 finds 的数组,以便在我需要更多时推送。

这是我设置实例的方式:

 new Vue({
  el: '#app',
  data: {
    finds: []
  },
  methods: {
    addFind: function () {
      this.finds.push({ value: '' });
    }
  }
});

以下是我设置模板的方式:

 <div id="app">
  <h1>Finds</h1>
  <div v-for="(find, index) in finds">
    <input v-model="find.value" :key="index">
  </div>
  <button @click="addFind">
    New Find
  </button>
</div>

虽然,我会尝试使用 index 之外的其他东西 key

这是上面的演示: https ://jsfiddle.net/crswll/24txy506/9/

原文由 Bill Criswell 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您问如何在 vue2 中执行此操作并选择插入和删除它,请看一下 js fiddle

 new Vue({
  el: '#app',
  data: {
    finds: []
  },
  methods: {
    addFind: function () {
      this.finds.push({ value: 'def' });
    },
    deleteFind: function (index) {
      console.log(index);
      console.log(this.finds);
      this.finds.splice(index, 1);
    }
  }
});
 <script src="https://unpkg.com/vue@2.5.3/dist/vue.js"></script>
<div id="app">
  <h1>Finds</h1>
  <div v-for="(find, index) in finds">
    <input v-model="find.value">
    <button @click="deleteFind(index)">
      delete
    </button>
  </div>

  <button @click="addFind">
    New Find
  </button>

  <pre>{{ $data }}</pre>
</div>

原文由 Yevgeniy Afanasyev 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题