vue 分页功能。翻页记忆搜索

1: template里 引入组件

<el-table ref='multipleTable'  :data="tableData"></el-table>

2: 设置分页用的参数

data() {

    return {

      tableData: [],

      multipleSelectionAll: [], // 所有选中的数据包含跨页数据

      multipleSelection: [], // 当前页选中的数据

      idKey: "id" // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)

    };

  },

3:初始化获取tableData函数中调用翻页记忆功能函数

methods: {

init(){

setTimeout(() => {
  this.setSelectRow();
}, 200);

},

   // 翻页记忆选择功能
    setSelectRow() {
      if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
        return;
      }
      // 标识当前行的唯一键的名称
      let idKey = this.idKey;
      let selectAllIds = [];
      let _self = this;
      this.multipleSelectionAll.forEach(row => {
        selectAllIds.push(row[idKey]);
      });
      this.$refs.multipleTable.clearSelection();
      for (var i = 0; i < this.tableData.length; i++) {
        if (selectAllIds.indexOf(this.tableData[i][idKey]) >= 0) {
          // 设置选中,记住table组件需要使用ref="multipleTable"
          this.$refs.multipleTable.toggleRowSelection(this.tableData[i],true);
        }
      }
    },
    // 记忆选择核心方法
    changePageCoreRecordData() {
      // 标识当前行的唯一键的名称
      let idKey = this.idKey;
      let _self = this;
      // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
      if (this.multipleSelectionAll.length <= 0) {
        this.multipleSelectionAll = this.multipleSelection;
        return;
      }
      // 总选择里面的key集合
      let selectAllIds = [];
      this.multipleSelectionAll.forEach(row => {
        selectAllIds.push(row[idKey]);
      });
      let selectIds = [];
      // 获取当前页选中的id
      this.multipleSelection.forEach(row => {
        selectIds.push(row[idKey]);
        // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
        if (selectAllIds.indexOf(row[idKey]) < 0) {
          _self.multipleSelectionAll.push(row);
        }
      });
      let noSelectIds = [];
      // 得到当前页没有选中的id
      this.tableData.forEach(row => {
        if (selectIds.indexOf(row[idKey]) < 0) {
          noSelectIds.push(row[idKey]);
        }
      });
      noSelectIds.forEach(id => {
        if (selectAllIds.indexOf(id) >= 0) {
          for (let i = 0; i < _self.multipleSelectionAll.length; i++) {
            if (_self.multipleSelectionAll[i][idKey] == id) {
              // 如果总选择中有未被选中的,那么就删除这条
              _self.multipleSelectionAll.splice(i, 1);
              break;
            }
          }
        }
      });
    },
    // 得到选中的所有数据
    getAllSelectionData() {
      // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
      this.changePageCoreRecordData();
    }
// 这块功能作者: Vicky丶Amor
//https://www.jianshu.com/p/4e029bb04634

 

},

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页