在 v-for 循环中使用 v-model

Raa*_*aaz 5 vue.js vuejs2

我正在 v-for 循环中渲染一个输入字段,并在该输入中使用 v-model 来获取输入的值,但是当我输入任何一个输入时,该值会输入到每个文本字段中。

我在这个小提琴中复制了我的问题

<div id="app">
  <h2>Todos:</h2>
  <ol>
    <li v-for="todo in todos">
      <label>
        <input type="text" v-model="score">

        <del v-if="todo.done">
          {{ todo.text }}
        </del>
        <span v-else>
          {{ todo.text }}
        </span>
      </label>
    </li>
  </ol>
</div>

new Vue({
  el: "#app",
  data: {
    score: [],
    todos: [
      { text: "Learn JavaScript", done: false },
      { text: "Learn Vue", done: false },
      { text: "Play around in JSFiddle", done: true },
      { text: "Build something awesome", done: true }
    ]
  },
})
Run Code Online (Sandbox Code Playgroud)

Bad*_*dgy 6

是的,很明显,这是因为您在 1 个值上绑定了 X 输入字段。您可能想要的是将 score[] 作为数组放入,用于该用途

<li v-for="(todo,index) in todos">
  <label>
    <input type="text" v-model="score[index]">

    <del v-if="todo.done">
      {{ todo.text }}
    </del>
    <span v-else>
      {{ todo.text }}
    </span>
  </label>
    </li>
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/o9awn47v/


小智 5

v-model="score"中使用时,分数被视为单个变量。

您可以在待办事项中添加分数,并在输入上对其进行 v 建模,这样您就可以轻松引用每个待办事项的分数值。

<div id="app">
  <h2>Todos:</h2>
  <ol>
    <li v-for="todo in todos">
      <label>
        <input type="text" v-model="todo.score">

        <del v-if="todo.done">
          {{ todo.text }}
        </del>
        <span v-else>
          {{ todo.text }}
        </span>
      </label>
    </li>
  </ol>
</div>

new Vue({
  el: "#app",
  data: {
    todos: [
      { text: "Learn JavaScript", done: false, score: '' },
      { text: "Learn Vue", done: false, score: '' },
      { text: "Play around in JSFiddle", done: true, score: '' },
      { text: "Build something awesome", done: true, score: '' }
    ]
  },
})
Run Code Online (Sandbox Code Playgroud)