• Vue+element-ui实现表格数据渲染+分页


    Vue+element-ui实现表格数据渲染+分页

    具体属性请看官方文档:Table 表格

    这里给大家看一个比较不错的表格数据渲染的例子,也是我目前所写的项目中的一部分。

    Snipaste_2022-08-16_22-19-24

    这里呢我们就不给大家说顶栏和侧边栏Aside部分了,我们就只说表格数据是怎么渲染出来的,以及分页是如何实现的。

    渲染表格

    表格这块当然是,它有几个属性.

    属性说明类型
    height固定列和表头string/number
    border是否带有纵向边框boolean
    max-heightTable 的最大高度。合法的值为数字或者单位为 px 的高度。string/number
    lazy是否懒加载子节点数据Boolean
    data显示的数据array

    你可以去element-ui中找一个合适的数据表格。

        
           
          
            
          
          
          
    
          
            
          
    
          
            
          
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    说明:

    1. 你要先绑定数据,比如这个表单中,< el-table>标签中,我绑定了tableData数据,该数据用来保存后端传过来的表单数据。

    2. 请务必注意< el-table-column>里的prop属性,要与tableData中的属性字段一致,这样才可以成功渲染。

    3. 你也可以在表格中使用< template>标签来添加你想要的任何小玩意(图标,按钮,输入框等)。

    我们可以创建一个函数,让Vue在执行created钩子函数时,调用此方法,将表格渲染出来。

    • data中定义保存表格数据的allTableData
    allTableData: [],
    
    • 1
    • 钩子函数调用
    created() {
        this.getProfile();
    },
    
    • 1
    • 2
    • 3
    • 在methods里书写getProfile函数
    getProfile() {
        this.$axios
            .get("xxx")
            .then((res) => {
            this.allTableData = res.xxx;
            //设置分页数据,该方法下面会讲到
            this.setPaginations();
        })
            .catch((err) => {
            console.log(err);
        });
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    博主使用的是axios发起请求获取数据,博主之前写过一篇讲axios的文章,点击这里跳转。

    分页

    我们可以找一个分页Pagination

    思想思路:先将表格数据放到一个变量中,之后再使用filter方法得到我们需要的数据后再放到要渲染的数据上,这样就完成了分页。

    • data
    tableData: [],
    allTableData: [],
    
    • 1
    • 2

    tableData用来存放需要渲染的数据,allTableDate用来存放所有数据(未过滤的数据)

    这两个数据大家在看的时候要注意。

    分页文档

    在官网的例子中,找一个你喜欢的,我选的这款。

    <el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage4"
    :page-sizes="[100, 200, 300, 400]"
    :page-size="100"
    layout="total, sizes, prev, pager, next, jumper"
    :total="400">
    </el-pagination>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这款包含完整功能,分页,跳转什么的就都有了。

    current-page:当前页。

    page-sizes:每页显示多少条,这里是数组。

    page-size:一页显示多少数据

    layout:组件布局,子组件名用逗号分隔

    size-change:pageSize 改变时会触发,当改变每页条数时,会回调。

    current-change:当前页发送改变时会回调。

    当然你也可以把这些数据写到data里,然后使用v-bind渲染到页面中:

    • data中配置相关对象
    paginations: {
        page_index: 1, //当前位于哪页
        total: 0, //数据总数
        page_size: 5, //一页显示多少条
        page_sizes: [5, 10, 15, 20], //每页显示多少条
        layout: "total, sizes, prev, pager, next, jumper", //翻页属性
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 使用v-bind绑定属性
    <el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page.sync="paginations.page_index"
    :page-sizes="paginations.page_sizes"
    :page-size="paginations.page_size"
    :layout="paginations.layout"
    :total="paginations.total"
    >
    </el-pagination>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这里注意handleSizeChangehandleCurrentChange,setPaginations这是我们一会要定义的三个实现分页的重要方法。

    • setPaginations用来实现初始化。
    //设置分页属性
    setPaginations() {
        //初始化
        this.paginations.total = this.allTableData.length;
        this.paginations.page_index = 1;
        this.paginations.page_size = 5;
        //设置默认的分页数据
        this.tableData = this.allTableData.filter((item, index) => {
            return index < this.paginations.page_size;
        });
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这块实现了初始化,并设置了默认的分页数据

    • handleCurrentChange当前页发生改变时的回调
    //分页方法
    handleCurrentChange(page) {
        //获取当前页
        let index = this.paginations.page_size * (page - 1);
        //获取数据总数
        let nums = this.paginations.page_size * page;
        //容器
        let tables = [];
        for (let i = index; i < nums; i++) {
            if (this.allTableData[i]) {
                tables.push(this.allTableData[i]);
            }
            this.tableData = tables;
        }
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • handleSizeChange当显示条数发生改变时的回调
    handleSizeChange(page_size) {
        this.paginations.page_index = 1;
        this.paginations.page_size = page_size;
        this.tableData = this.allTableData.filter((item, index) => {
            return index < page_size;
        });
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这块的逻辑就不和大家细说了,如果想看示例的话,项目仓库链接

  • 相关阅读:
    C++多线程01
    大家这么喜欢这件羽绒服的吗?眼光太好啦
    【算法挨揍日记】day31——673. 最长递增子序列的个数、646. 最长数对链
    Java笔记——文件操作I/O 01
    部分移动卡 无人接听时呼叫转移失败 问题分析
    mysql中事务的基本介绍,提交事务和事务回滚的基本介绍,事务的隔离性的详细说明
    基于flask和网页端部署yolo自训练模型
    大端与小端
    PTA题目 装睡
    UML概述及UML类图详解
  • 原文地址:https://blog.csdn.net/liyuchenii/article/details/126376225