美文网首页
ElementUi多选框表格,翻页选中有记忆功能保持默认选中

ElementUi多选框表格,翻页选中有记忆功能保持默认选中

作者: 一个小前端程序员 | 来源:发表于2021-06-24 17:17 被阅读0次
    <template>
      <el-table
        ref="multipleTable"
        :data="tableData"
        style="width: 100%"
        @select="selectFn"
        @select-all="selectAllFn"
      >
        <el-table-column type="selection" width="55"> </el-table-column>
      </el-table>
    </template>
    <script>
    // 在一个对象数据中寻找某个对象的下标,通过key的值相等,判断数组中是否包含对象
    const arrFindObjIndex = (arr, obj, key) => {
      let index = -1;
      arr.forEach((item, idx) => {
        if (item[key] === obj[key]) {
          index = idx;
        }
      });
      return index;
    };
    export default {
      data() {
        return {
          selection: [],
          tableData: [],
        };
      },
      methods: {
        //   翻页之后调用该方法
        toggleSelection() {
          //翻页之后要勾选上一页选中的,增加延时,在列表渲染完成后选中
        setTimeout(() => {
          this.selection.forEach((item) => {
            if (arrFindObjIndex(this.selection, item, "id") !== -1) {
              this.$refs["multipleTable"].toggleRowSelection(item);
            }
          });
        },500)
        },
        selectAllFn(selection) {
          if (!selection.length) {
            // 全选时,选中的数据为空时,要清理掉缓存中当页的数据
            this.tableData.forEach((item) => {
              const index = arrFindObjIndex(this.selection, item, "id");
              if (index !== -1) {
                this.selection.splice(index, 1);
              }
            });
          } else {
            // 全选时,选中的数据不为空时,要在缓存中添加当页的数据
            selection.forEach((item) => {
              const index = arrFindObjIndex(this.selection, item, "id");
              if (index === -1) {
                this.selection.push(item);
              }
            });
          }
        },
        selectFn(selection, row) {
          const flag = selection.some((item) => {
            return item.id === row.id;
          });
          const index = arrFindObjIndex(this.selection, row, "id");
          if (!flag) {
            // selection中不包含row则是取消选中该行
            if (index !== -1) {
              this.selection.splice(index, 1);
            }
          } else {
            // selection中不包含row则是选中该行
            if (index === -1) {
              this.selection.push(row);
            }
          }
        },
      },
    };
    </script>
    

    相关文章

      网友评论

          本文标题:ElementUi多选框表格,翻页选中有记忆功能保持默认选中

          本文链接:https://www.haomeiwen.com/subject/wthgyltx.html