如何 v-for 检查值

How to v-for checked value

我正在尝试创建一个复选框 select 只有一个。

<div id="app">
 <div v-for="(question, index) in questions">
   <input type="checkbox" value="question.value" v-model="additional_grouped"  @change="uniqueCheck"> {{question.title}}
  </div>
  {{ result }}
</div>

我的 JS 如下所示:

new Vue({
  el: '#app',
  data() {
    return {
      additional: [],
      additional_grouped: [],
       questions: [
         {
           title: 'A',
           value: 0
         },
         {
           title: 'B',
           value: 1
         },
         {
           title: 'C',
           value: 2
         }
       ]
    }
  },
  computed: {
    result: function(){
      return this.additional.concat(this.additional_grouped);
    }
  },
  methods: {
    uniqueCheck(e){
      console.log(e)
      this.additional_grouped = [];
      if (e.target.checked) {
          this.additional_grouped.push(e.target.value);
      }
    }
  }
});

这是旧结果。

我正在努力获得这样的结果。

我不能通过 v-for 方法做到这一点,但我想这样做。因为我有很多数据,我如何检查v-for中的值?

这是我的笔:enter link description here

使用 :value="question.value" 而不是 value="question.value"

new Vue({
  el: '#app',
  data() {
    return {
      additional: [],
      additional_grouped: [],
       questions: [
         {
           title: 'A',
           value: 0
         },
         {
           title: 'B',
           value: 1
         },
         {
           title: 'C',
           value: 2
         }
       ]
    }
  },
  computed: {
    result: function(){
      return this.additional.concat(this.additional_grouped);
    }
  },
  methods: {
    uniqueCheck(e){
      this.additional_grouped = [];
      if (e.target.checked) {
          this.additional_grouped.push(e.target.value);
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
 <div v-for="(question, index) in questions">
   <input type="checkbox" :value="question.value" v-model="additional_grouped"  @change="uniqueCheck"> {{question.title}}
  </div>
  {{ result }}
</div>

您缺少值绑定 (:value),这里修复了您的示例:

new Vue({
  el: '#app',
  data() {
    return {
      additional: [],
      additional_grouped: [],
       questions: [
         {
           title: 'A',
           value: 0
         },
         {
           title: 'B',
           value: 1
         },
         {
           title: 'C',
           value: 2
         }
       ]
    }
  },
  computed: {
    result: function(){
      return this.additional.concat(this.additional_grouped);
    }
  },
  methods: {
    uniqueCheck(e){
      this.additional_grouped = [];
      if (e.target.checked) {
          this.additional_grouped.push(e.target.value);
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
 <div v-for="(question, index) in questions">
   <input type="checkbox" :value="question.value" v-model="additional_grouped"  @change="uniqueCheck"> {{question.title}}
  </div>
  {{ result }}
</div>

Documentation

如果你想得到一个复选框的值数组,你应该这样做

<div id="app">
 <div v-for="(question, index) in questions" :key="index">
   <input type="checkbox" v-model="question.checked"> {{question.title}}
  </div>
  {{ result }}
</div>

new Vue({
  el: '#app',
  data() {
    return {
       questions: [
         {
           title: 'A',
           value: 0
         },
         {
           title: 'B',
           value: 1
         },
         {
           title: 'C',
           value: 2
         }
       ]
    }
  },
  computed: {
    result: function(){
      return this.questions.filter(q => q.checked).map(q => q.value)
    }
  }
});