zoukankan      html  css  js  c++  java
  • el-table 分页记忆缓存

      1 <template>
      2   <div class="table">
      3     <p>表格的使用</p>
      4     <el-table
      5       :data="tables"
      6       ref="tb"
      7       :border="true"
      8       @selection-change="handleSelectionChange"
      9       style=" 100%">
     10       <el-table-column type="selection" width="55"/>
     11       <el-table-column
     12         prop="date"
     13         label="日期"
     14         width="180">
     15       </el-table-column>
     16       <el-table-column
     17         prop="name"
     18         label="姓名"
     19         width="180">
     20       </el-table-column>
     21       <el-table-column
     22         prop="address"
     23         label="地址">
     24       </el-table-column>
     25     </el-table>
     26     <div>
     27       <el-pagination
     28         background
     29         @current-change="currentChange"
     30         :current-page="pageIndex"
     31         :total="tableData.length"
     32         :page-size="pageSize"
     33         :page-sizes="pageSizes"
     34         layout="total, prev, pager, next, sizes, jumper"
     35         @size-change='sizeChange'>
     36       </el-pagination>
     37       <el-button type="success" @click="onShow">22222</el-button>
     38     </div>
     39   </div>
     40 </template>
     41 <script>
     42 export default {
     43   name: 'test001',
     44   data () {
     45     return {
     46       tableData: [{
     47         index: 0,
     48         objectId: 'tyui-123',
     49         date: '2016-05-02',
     50         name: '王小虎1',
     51         address: '上海市普陀区金沙江路 1511 弄'
     52       }, {
     53         index: 1,
     54         objectId: 'tyui-ljh',
     55         date: '2016-05-04',
     56         name: '王小虎2',
     57         address: '上海市普陀区金沙江路 1512弄'
     58       }, {
     59         index: 2,
     60         objectId: 'tyui-mbn',
     61         date: '2016-05-01',
     62         name: '王小虎3',
     63         address: '上海市普陀区金沙江路 1513弄'
     64       }, {
     65         index: 3,
     66         objectId: 'tyui-zccv',
     67         date: '2016-05-03',
     68         name: '王小虎4',
     69         address: '上海市普陀区金沙江路 1514弄'
     70       }, {
     71         index: 4,
     72         objectId: 'tyui-ghgh',
     73         date: '2016-05-04',
     74         name: '王小虎5',
     75         address: '上海市普陀区金沙江路 1515弄'
     76       }, {
     77         index: 5,
     78         objectId: 'tyui-asd',
     79         date: '2016-05-04',
     80         name: '王小虎6',
     81         address: '上海市普陀区金沙江路 1516弄'
     82       }, {
     83         index: 6,
     84         objectId: 'tyui-xdg',
     85         date: '2016-05-04',
     86         name: '王小虎7',
     87         address: '上海市普陀区金沙江路 1517弄'
     88       }
     89       ],
     90       value1: null,
     91       secIndex: 0,
     92       pageSize: 3,
     93       pageSizes: [3, 5, 10],
     94       pageIndex: 1,
     95       tables: [],
     96       multipleSelectionAll: [], // 所有选中的数据包含跨页数据
     97       multipleSelection: [], // 当前页选中的数据
     98       idKey: 'objectId'
     99     }
    100   },
    101   mounted () {
    102     console.log('44444444444444444')
    103     this.find()
    104   },
    105   methods: {
    106     onShow () {
    107       this.multipleSelectionAll.forEach(item => {
    108         this.$message.success(item['name'])
    109       })
    110     },
    111     // 分页
    112     currentChange (pageIndex) {
    113       this.pageIndex = pageIndex
    114       this.find()
    115       console.log('currentChange-------------------------->>>>>>>>>>>>>>>>>>>>>')
    116     },
    117     sizeChange (pageSize) {
    118       // 改变每页显示条数的时候调用一次
    119       this.pageSize = pageSize
    120       this.find()
    121       console.log('sizeChange===========================>>>>>>>>>>>>>>>>>>>>>>>')
    122     },
    123     find () {
    124       this.changePageCoreRecordData()
    125       let start = this.pageSize * (this.pageIndex - 1)
    126       console.log('start=====>' + start)
    127       let end = this.pageSize * this.pageIndex
    128       console.log('end=====>' + end)
    129       this.tables = this.tableData.slice(start, end)
    130       setTimeout(() => {
    131         this.toggleSelection()
    132       }, 50)
    133     },
    134     toggleSelection () {
    135       if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
    136         return
    137       }
    138       // 标识当前行的唯一键的名称
    139       let idKey = this.idKey
    140       let selectAllIds = []
    141 
    142       this.multipleSelectionAll.forEach(row => {
    143         selectAllIds.push(row[idKey])
    144       })
    145       this.$refs.tb.clearSelection()
    146       for (let i = 0; i < this.tables.length; i++) {
    147         if (selectAllIds.indexOf(this.tables[i][idKey]) >= 0) {
    148           // 设置选中,记住table组件需要使用ref="tb"
    149           this.$refs.tb.toggleRowSelection(this.tables[i], true)
    150         }
    151       }
    152     },
    153     handleSelectionChange (data) {
    154       this.multipleSelection = data
    155       setTimeout(() => {
    156         this.changePageCoreRecordData()
    157       }, 50)
    158     },
    159     changePageCoreRecordData () {
    160       // 标识当前行的唯一键的名称
    161       let idKey = this.idKey
    162       // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
    163       if (this.multipleSelectionAll.length <= 0) {
    164         this.multipleSelectionAll = this.multipleSelection
    165         return
    166       }
    167       // 总选择里面的key集合
    168       let selectAllIds = []
    169       this.multipleSelectionAll.forEach(row => {
    170         selectAllIds.push(row[idKey])
    171       })
    172       let selectIds = []
    173       // 获取当前页选中的id
    174       this.multipleSelection.forEach(row => {
    175         selectIds.push(row[idKey])
    176         // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
    177         if (selectAllIds.indexOf(row[idKey]) < 0) {
    178           this.multipleSelectionAll.push(row)
    179         }
    180       })
    181       let noSelectIds = []
    182       // 得到当前页没有选中的id
    183       this.tables.forEach(row => {
    184         if (selectIds.indexOf(row[idKey]) < 0) {
    185           noSelectIds.push(row[idKey])
    186         }
    187       })
    188       // 但之前选中的数据取消选中,要从记忆选中数组中取出这条记录
    189       noSelectIds.forEach(id => {
    190         if (selectAllIds.indexOf(id) >= 0) {
    191           for (let i = 0; i < this.multipleSelectionAll.length; i++) {
    192             if (this.multipleSelectionAll[i][idKey] === id) {
    193               // 如果总选择中有未被选中的,那么就删除这条
    194               this.multipleSelectionAll.splice(i, 1)
    195               break
    196             }
    197           }
    198         }
    199       })
    200     }
    201 
    202   }
    203 }
    204 </script>
  • 相关阅读:
    了解PCI Express的Posted传输与Non-Posted传输
    最强加密算法?AES加解密算法Matlab和Verilog实现
    校招必看硬核干货:IC前端这样学,秒变offer收割机!
    一次压力测试Bug排查-epoll使用避坑指南
    硬核干货 | C++后台开发学习路线
    Web服务器项目详解
    O准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)
    Linux最大文件句柄(文件描述符)限制和修改
    linux中对EINTR错误的处理
    C/C++实现单向循环链表(尾指针,带头尾节点)
  • 原文地址:https://www.cnblogs.com/yangxuming/p/13963814.html
Copyright © 2011-2022 走看看