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绑定,否则将会在全部小类选中时,大类并未选中,而是在下一次点击时才会显示

Vue 2中结合Element UI的`el-table`组件实现跨页分页下的功能,可以按照以下步骤操作: 1. 安装依赖:首先确保已经安装了VueElement UI以及Vue Router等必要的库。 ```bash npm install element-ui vue-router ``` 2. 引入组件:在你的Vue项目中引入`ElTable`, `ElCheckbox`, 和`ElPagination`组件。 ```html <template> <div> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :total="totalCount" :page-size="pageSize" layout="sizes, prev, pager, next, jumper"></el-pagination> <el-table :data="tableData" border highlight-current-row> <!-- 添加列和择框 --> <el-table-column type="selection" width="55"></el-table-column> <!-- ... 其他列 ... --> </el-table> </div> </template> ``` 3. 数据绑定和处理函数:在`data`项中初始化表格数据,并在`methods`中创建事件处理器。 ```javascript export default { data() { return { tableData: [], // 从服务器获取的数据 totalCount: 0, pageSize: 10, // 每页显示的数量 currentPage: 1, }; }, methods: { handleSizeChange(size) { this.pageSize = size; }, handleCurrentChange(page) { this.currentPage = page; this.loadTableData(); }, loadTableData() { // 根据当前页数和每页大小请求分页数据 const start = (this.currentPage - 1) * this.pageSize; const end = start + this.pageSize; this.$axios.get('/api/data', { params: { start, limit: this.pageSize } }) .then(response => { this.tableData = response.data.data; this.totalCount = response.data.total; }); } }, created() { this.loadTableData(); // 初始加载数据 }, }; ``` 4. 注意事项: - 确保你在发送API请求时正确传递了分页参数,如`start`和`limit`。 - 跨页的判断通常由后端返回的`totalCount`字段决定,需要更新总行数才能计算出实际的中项。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值