在 Vue 2 中如何在 v-for 循环中只选中第一个输入类型复选框

In Vue 2 how to have only 1st input type checkbox checked in v-for loop

感谢您的关注,我有点想stuck.Trying弄清楚如何默认选中第一个复选框。

这是我的 JS,类别正在动态进入

Vue.component('category-filter', {
  template: '#category-filter-template',
  props: {
    appMounted: false,
  },
  data() {
    return {
      categories: {},
      checkedState: false,
    };
  },
  methods: {
    handleCheckboxClicked(e) {
      console.log({ e });
    },
  },
  mounted() {
    this.appMounted = true;
    this.categories =jsContext.categories
  },
});

这是我的模板,我选择将样式设为内联以使组件更易于重用

<div
  class="filter-container--wrapper"
  style="
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    flex-wrap: wrap;
    -webkit-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    margin-bottom: 2rem;
    color: #fff;
    background-color: #5676a7;
    border-radius: 5px;
  "
>
  <div
    id="filter-item"
    style="padding: 15px"
    v-for="category in categories"
    :key="category.id"
  >
    <input
      id="category-name"
      type="checkbox"
      @click="handleCheckboxClicked($event)"
      :value="category.id"
      :checked="checkedState"
    />
    <label for="category-name">
      <span>\{{category.name}}</span>
    </label>
  </div>
</div>

您应该在模型中设置真实来源,而不是在渲染中。

你应该有类似的东西

mounted() {
  this.categories[0].id=true;
}

但是,不清楚类别的结构是什么。它是一个数组吗?如果是这样,您应该将其初始化为空数组而不是对象。此外,如果您可能应该使用 v-model 而不是 :value 以便将选中状态的更改保存在模型中。最后,我不确定您是否希望将模型链接到 id 属性。可能还有另一个您要绑定的属性。

您可以在为模型设置数据时通过设置来初始定义选中的值:

this.categories = Array.from(jsContext.categories || []).map((v,i) => (v.checked = !i, v));

各种问题:

  • 您应该使用模型而不是 :value,然后将模型更改为选中。
  • 不要改变道具!
  • 如果类别是数组,则将其设置为数据中的数组,而不是对象。
  • 最好对内联样式使用计算属性,或者如果可能的话总是把它放在你的 CSS 文件或 <style> 中,如果你不这样做,你可以将它的范围限定在 #category-filter-template .filter-container--wrapper {} '希望它有冲突。
<template id="category-filter-template">
  <div class="filter-container--wrapper" :style="wrapperStyle">
    <div
      id="filter-item"
      :style="itemStyle"
      v-for="category in categories"
      :key="category.id"
    >
      <input
        id="category-name"
        type="checkbox"
        v-model="category.checked"
        :checked="category.checked"
      />
      <label for="category-name">
        <span>\{{category.name}}</span>
      </label>
    </div>
  </div>
</template>

那么你的组件:

Vue.component('category-filter', {
  template: '#category-filter-template',
  data() {
    return {
      categories: []
    };
  },
  computed: {
    wrapperStyle () {
      return {
      'display': 'flex',
      'flex-wrap': 'wrap',
      '-webkit-box-pack': 'center',
      '-ms-flex-pack': 'center',
      'justify-content': 'center',
      'margin-bottom': ' 2rem',
      'color': '#fff',
      'background-color': ' #5676a7',
      'border-radius': ' 5px'
      }
    },
    itemStyle () {
      return {
        'padding': '15px'
      }
    }
  },
  mounted() {
    this.categories = Array.from(jsContext.categories || []).map((v,i) => (v.checked = !i, v))
  },
})

查看在线工作:https://playcode.io/847454/