vue+element中checkbox 實(shí)現(xiàn)遍歷分組全選

1、html部分

  <div v-for="(item, index) in data" :key="index">
      <el-checkbox
        style="margin-left: 30px"
        :indeterminate="item.isIndeterminate"
        v-model="item.isCheck"
        @change="checkTitle(item.isCheck, index)"
        >全選</el-checkbox
      >

      <el-checkbox-group
        v-model="item.checkedData"
        @change="checkItem(item.checkedData, index)"
      >
        <el-checkbox
          v-for="(a, index) in item.children"
          :label="a.value"
          :key="index"
          >{{ a.label }}</el-checkbox
        >
      </el-checkbox-group>
    </div>

2、js部分

<script>
export default {
  data() {
    return {
      data: [
        {
          isCheck: false,
          isIndeterminate: true,
          checkedData: [],
          children: [
            {
              value: "11",
              label: "分組1-1",
            },
            {
              value: "12",
              label: "分組1-2",
            },
          ],
        },
        {
          isCheck: false,
          isIndeterminate: true,
          checkedData: [],
          children: [
            {
              value: "21",
              label: "分組2-1",
            },
            {
              value: "22",
              label: "分組2-2",
            },
            {
              value: "23",
              label: "分組2-3",
            },
            {
              value: "24",
              label: "分組2-4",
            },
          ],
        },
      ],
    };
  },
  methods: {
    checkItem(val, index) {
      let checkedCount = val.length;
      this.data[index].isCheck =
        checkedCount === this.data[index].children.length;

      this.data[index].isIndeterminate =
        checkedCount > 0 && checkedCount < this.data[index].children.length;
    },

    checkTitle(val, index) {
      let arr = [];
      const re = this.data[index].children;
      //全選
      if (val) {
        for (let i = 0; i < re.length; i++) {
          arr[i] = re[i]["value"];
        }
      }
      this.data[index].checkedData = arr;
      this.data[index].isIndeterminate = false;
    },
  },
};
</script>

效果圖:


image.png

總結(jié):

  1. indeterminate屬性 表示 checkbox 的不確定狀態(tài) (小橫線樣式)
  2. 此代碼中為mock數(shù)據(jù),真實(shí)場景中,首先拿到接口返回?cái)?shù)據(jù),之后加工成前端想要的數(shù)據(jù)結(jié)構(gòu) (類似代碼中data的數(shù)據(jù)格式),可通過for循環(huán)、map遍歷、reduce等方式
  3. 在@change事件中寫內(nèi)部邏輯,最終實(shí)現(xiàn)功能
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容