el-table在ajax分页时支持单页全选和所有页全选

说明:由于本篇主要讲解全选,所以只会罗列出和其相关的核心代码,并不会将所有的代码一并贴出。

  界面代码:

                    style="width: 100%"                    ref="table"                    @selection-change="handleSelectionChange">         

                            align="center">                                                          ......


table上使用了ref属性,因为全选和反选时要用到dom操作方法toggleRowSelection,同样,表格自动铺满纵向屏幕时,也需要进行dom操作,这并非本节所讲内容,只是简单提一下,el-table并没有像layui中的table那样提供百分比-固定像素的方式响应式制定表格高度,我们得手动用js计算浏览器屏幕高度。

  js部分代码如下:

import pager from "@/components/table/Pager.vue";

export default {

components: {pager},

  data () {

    return {

  checkedAll: false,//全选所有 }

},

  methods: {

  // 全选操作    handleSelectionChange (val) {

      this.loading = val.length > 0 ?false:true;

        this.multipleSelection = val;

    },

    // 选择需要的/取消选中    toggleSelection (rows) {

      if (rows) {

        rows.forEach(row => {

          this.$refs.table.toggleRowSelection(row);

        });

      } else {

        this.$refs.table.clearSelection();

      }

    },

    //改变全选所有复选框    changeCheckAll (val) {

      if (val) {

        // 全选选中时当前页所有数据选中this.tableData.forEach(row => {

          if (row) {

            this.$refs.table.toggleRowSelection(row,true);

          }

        });

      } else {

        this.$refs.table.clearSelection();

      }

    },

}

}

  在每次点击“页码“之后,会自动执行查询方法,此时,如果点击了全选所有按钮,要在数据执行查询之后,再选中当前页面所有项,代码如下所示:

//执行查询方法getList后回调函数当中编写如下代码:

if(this.checkedAll){

          this.$nextTick(()=>{

            this.changeCheckAll(this.checkedAll);

          })

    }

  由于所有的dom操作要在dom渲染之后执行,所以使用了this.$nextTick()方法。

在element-ui的Table组件当中,并没有提供给表头当中的复选框设置文本的属性和方法,我们可以通过使用css伪类来创建文本。

正在上传... 取消

/deep/ .el-table__header .el-table-column--selection .cell .el-checkbox:after {  content: "当页";  color: #606266;  font-weight: 500;  margin-left: 10px;  font-size: 14px;}

正在上传... 取消

  /deep/用于在css作用域当中进行样式透传,覆盖子组件的样式。

  分页组件Pager.vue是对el-pagination组件的二次封装,其代码如下:

亚马逊测评 www.yisuping.com

你可能感兴趣的:(el-table在ajax分页时支持单页全选和所有页全选)