【问题标题】:How to handle v-model in dynamic input fields如何在动态输入字段中处理 v-model
【发布时间】:2022-01-17 15:13:19
【问题描述】:

我有一个表单,用户可以选择单击“添加”按钮并将内容输入新字段。我目前已经为这些字段动态生成了 v-model,但我意识到我需要在 setup 函数中注册/返回它们中的每一个才能使用它们。

如果我不知道用户将决定添加多少字段,如何为不同的输入字段生成和注册/返回 v-model?

<div
    v-for="(content, i) in contentFields"
    :key="i"
>
  <div>Content {{ i }}</div>
        <q-input
          :v-model="`contentName_` + i"
          outlined
          type="text"
          dense
        />
 </div></div>


  

【问题讨论】:

  • 如果 content 是输入值 ->`:v-model="contentFields[i]"
  • :v-model="contentName_ + i" 正在返回字符串...不是对象/变量。
  • @digitalniweb 我不希望它是一个字符串,以便我可以在代码的其他部分使用该字符串来引用用户在该字段中所做的条目吗?如果这些字段都是不同的内容,我认为我需要不同的 v-model 名称。
  • @digitalniweb 更新:了解您的评论。我的方法不对。如何将正确的 v-model 分配给不确定数量的输入字段,然后返回/注册这些名称,以便我可以在代码中的其他区域引用/使用它们?

标签: javascript vue.js


【解决方案1】:

请用简单的动态 v-models 看看下面的 sn-p:

new Vue({
  el: "#demo",
  data() {
    return {
      contentFields: [{name: '', desc: ''}]
    }
  },
  methods: {
    addInput() {
      let newI = this.contentFields.length
      this.contentFields.push({name: '', desc: ''})
    },
    setD() {
      console.log(this.contentFields)
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <button @click="addInput">add</button>
  <div v-for="(content, i) in contentFields" :key="i">
    <div>Content {{ i }}</div>
      <input
        v-model="content.name"
        outlined
        type="text"
        dense
        @change="setD"
      />
      <input
        v-model="content.desc"
        outlined
        type="text"
        dense
        @change="setD"
      />
  </div>
</div>

【讨论】:

  • 感谢您的宝贵时间。 (1)对于数据返回中的“contentFields:[{0:''},{1:''}]”,我如何为未知数量的条目添加它?如果一个用户添加了一个字段,而另一个用户添加了 10 个字段怎么办? (2) 如果 v-for 生成两个内容条目而不是一个,我会为 v-model 做什么?
  • 是的,确实如此!但是,代码只返回 data 下的两个 contentField 条目,对吗? "contentFields: [{0: ''}, {1: ''}]" -- 如果有两个以上的条目是不是需要增加?
  • 再次感谢 - 关于如何使用两个输入字段而不是一个输入字段来处理此问题的任何建议? (例如,如果每次单击 ADD 时我的内容都有一个“名称”和“描述”的输入字段。
  • 不客气,现在请检查我更新的答案:)
猜你喜欢
  • 2018-06-13
  • 2019-09-09
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 2019-06-07
  • 2019-10-07
  • 2021-09-17
  • 2020-08-11
相关资源
最近更新 更多