elementUi在table组件中添加多选条件

先上图
在这里插入图片描述
该图前面的为全选框,后面的为多选框

数据
      tableData: [
        {
          id:1,					//id
          name: "11",			//大类名
          checkedCities: [],	//用来存放选中的小类,并表示小类选中状态
          indeterminate: false,	//半选中状态
          checkAll: false,		// 大类的选中状态
          cityOptions: [],		//小类
        },
        {
          id:2,
          name: "22",
          checkedCities: [],
          indeterminate: false,
          checkAll: false,
          cityOptions: ["2-1", "2-2","2-3","2-4"],
        },
        {
          id:3,
          name: "3",
          checkedCities: [],
          indeterminate: false,
          checkAll: false,
          cityOptions: ["3-1", "3-2","3-3","3-4","3-5"],
        },
        {
          id:4,
          name: "4",
          checkedCities: [],
          indeterminate: false,
          checkAll: false,
          cityOptions: [],
        },
      ],
1Table 表格将数据进行绑定
  • 这是一个多维数组结构
  • 大类和小类绑定的v-model不能将其直接在data中注册,否则容易进行整个大数组的修改
  • 大类绑定的v-model相应的scope.row.checked 用来true或false自己大类的点击状态
  • 小类绑定的v-model相应的scope.roe.checkedCities 用来存储自己所点击的小类数组

table代码:

          <el-table :data="tableData" :show-header="false" style="width: 100%">
            <el-table-column label="大类" width="180">
              <template slot-scope="scope">
                <el-checkbox
                  @change="handleAllCheck(scope.row)"
                  :label="scope.row.name"
                  v-model="scope.row.checked"
                  :indeterminate="scope.row.indeterminate"
                  >{{ scope.row.name }}</el-checkbox
                >
              </template>
            </el-table-column>
            <el-table-column label="小类">
              <template slot-scope="scope">
                <el-checkbox-group v-model="scope.row.checkedCities">
                  <el-checkbox v-for="item in scope.row.cityOptions" @change="handleCheckedChange(scope.row)" :label="item" :key="item">{{ item }}</el-checkbox>
                </el-checkbox-group>
              </template>
            </el-table-column>
          </el-table>
        </el-form-item>
2半选、多选、全选

得获取到当前选中的行的所有内容。内容中就包括了 checked全选选中状态,cityOptions小类的选中个数

	// 从小类选中大类
    handleCheckedChange(value) {
      let count = value.cityOptions.length
      // 若其中小类的checkedCities的长度与自己本身的相等,则大类的checked为true
      value.checked = (count === value.checkedCities.length) ? true : false;
      // 若小类的checkedCities的长度大于0,并且小于cityOptions(它本身所含有的数组)长度则为半选
      value.indeterminate = value.checkedCities.length > 0 && value.checkedCities.length < value.cityOptions.length
    },
    // 全选   该方法能直接进行大类 checked的修改  不需要再进行判断
    handleAllCheck(val) {
      // 若大类的checked并未被选中,则将小类checkedCities 赋值cityOptions 
      val.checkedCities = val.checked ? val.cityOptions : []
      // 半选取消
      val.indeterminate = false
    },

坑:在element上面,小类的点击事件是绑定在groups上面的,但是由于element的groups的input事件的点击时有滞后,所有应该直接给el-checkbox绑定,否则将会在全部小类选中时,大类并未选中,而是在下一次点击时才会显示

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值