代码之家  ›  专栏  ›  技术社区  ›  Jinjinov

当v-for用于对象的属性时,将v-model与复选框一起使用

  •  3
  • Jinjinov  · 技术社区  · 6 年前

    使用 v-model 什么时候 v-for

    new Vue({
      el: '#example',
      data: {
        names: [
          { name: 'jack', checked: true },
          { name: 'john', checked: false },
          { name: 'mike', checked: false }
        ]
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script>
    <div id='example'>
      <div v-for="(item, index) in names" :key="index">
      <input type="checkbox" :id="item.name" v-model="item.checked">
      <label :for="item.name">{{ item.name }} {{ item.checked }}</label>
      </div>
    </div>

    使用 V-模型 什么时候 v代表 与对象的属性一起使用 :

    new Vue({
      el: '#example',
      data: {
        names: {
          jack: true,
          john: false,
          mike: false
        }
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script>
    <div id='example'>
      Does not work with v-for:
      <div v-for="(value, key, index) in names" :key="index">
      <input type="checkbox" :id="key" v-model="value">
      <label :for="key">{{ key }} {{ value }}</label>
      </div>
      But it does work without v-for:
      <br>
      <input type="checkbox" id="jack" v-model="names.jack">
      <label for="jack">jack</label>
      <br>
      <input type="checkbox" id="john" v-model="names.john">
      <label for="john">john</label>
      <br>
      <input type="checkbox" id="mike" v-model="names.mike">
      <label for="mike">mike</label>
      <br>
      And it even changes the checkbox above!
    </div>

    具有对象的属性而没有 v代表

    为什么?我该怎么修?我真的需要 使用对象的属性

    编辑:我不需要检查值的数组,我需要更改对象属性的精确值。

    1 回复  |  直到 6 年前
        1
  •  9
  •   Richard Matsen    6 年前

    语法 v-model="names[key]" Dynamic v-model directive

    new Vue({
      el: '#example',
      data: {
        names: {
          jack: true,
          john: false,
          mike: false
        }
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.13/vue.min.js"></script>
    <div id='example'>
      Does not work with v-for:
      <div v-for="(value, key, index) in names" :key="index">
        <input type="checkbox" :id="key" v-model="names[key]">
        <label :for="key">{{ key }} {{ value }}</label>
      </div>
      But it does work without v-for:
      <br>
      <input type="checkbox" id="jack" v-model="names.jack">
      <label for="jack">jack</label>
      <br>
      <input type="checkbox" id="john" v-model="names.john">
      <label for="john">john</label>
      <br>
      <input type="checkbox" id="mike" v-model="names.mike">
      <label for="mike">mike</label>
      <br>
      And it even changes the checkbox above!
    </div>