vue3+elementplus的表格展示和分页实战

news2024/12/23 10:25:51

文章目录

    • 一、Element Plus的安装使用
    • 二、el-table 表格组件
    • 三、el-pagination 分页组件
    • 四、全部代码
    • 五、效果

Element Plus 是一个基于 Vue 3 的现代化 UI 组件库,旨在帮助开发者快速构建美观且功能丰富的 Web 应用程序。它提供了大量的 UI 组件,如按钮、表单、表格、弹出框、标签页、树形控件等,涵盖了 Web 应用开发中常见的大多数场景。本文通过一个实例来说明vue3+elementplus查询、展示和分页实战。

一、Element Plus的安装使用

要开始使用 Element Plus,首先需要在项目中安装它。如果你正在使用 Vue 3 的项目,可以通过 npm 或 yarn 安装 Element Plus:

npm install element-plus 

然后可以在Vue 项目中全局引入 Element Plus:

import { createApp } from 'vue'
import App from './App.vue'

// 导入路由
import Router from './components/tools/Router'
// 导入ElementPlus
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

const app = createApp(App)
// 遍历ElementPlusIconsVue中的所有组件进行祖册
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    // 向应用实例中全局注册图标组件
    app.component(key, component)
}
app.use(ElementPlus) // 使用ElementPlus
app.use(Router); // 使用路由
app.mount('#app')

二、el-table 表格组件

el-table 是Element Plus 中的一个重要组件,用于展示列表数据。可以通过 组件来定义表格中的每一列,包括列标题、列宽、对齐方式等,可以结合 el-pagination 可以实现分页功能。示例代码如下:

<el-table
            ref="multipleTable"
            :data="postList"
            tooltip-effect="dark"
            style="width: 100%"
            fit
            :pagination="pagination"
            @selection-change="handleSelectionChange" >
                <el-table-column
                type="selection"
                width="55">
                </el-table-column>
                <el-table-column
                label="ID"
                width="100"
                prop="id">
                </el-table-column>
                <el-table-column
                label="标题"
                width="450"
                prop="title">
                </el-table-column>
                <el-table-column
                label="是否置顶"
                width="100"
                prop="isTop">
                </el-table-column>
                <el-table-column
                label="热度"
                width="100"
                prop="viewsCount">
                </el-table-column>
                <el-table-column
                label="发布时间"
                width="200"
                prop="pubTime">
                </el-table-column>
                <el-table-column
                label="操作"
                >
                    <template #default="scope">
                        <el-button size="mini" type="danger" @click="deleteItem(scope.$index)">删除</el-button>         
                    </template>     
                </el-table-column>
            </el-table>

其中
:data="postList" 绑定要显示在表格中的数据源,通常是一个对象数组
fit: 让表格宽度自动填充父容器。
:pagination="pagination" 绑定分页的数据对象

数据定义如下:

// 博客文章列表数据
postList:[],
// 分页
pagination: {
    currentPage: 1, // 当前页
    pageSize: 10, // 每页显示条数
    total: 0, // 总条数
    layout: 'total,sizes,prev, pager, next, jumper', // 分页布局
},

三、el-pagination 分页组件

el-pagination Element Plus 中用于实现分页功能的重要组件。它可以与 el-table 组件结合使用,实现数据的分页显示。示例代码如下:

<el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="pagination.currentPage"
    :page-sizes="[10, 20, 30, 40]"
    :page-size="pagination.pageSize"
    layout="total, sizes, prev, pager, next, jumper"
    :total="pagination.total">
</el-pagination>

属性
@size-change="handleSizeChange" 当每页显示数量变化时触发。
@current-change="handleCurrentChange" 当当前页变化时触发。
:current-page="currentPage" 设置当前页。
:page-sizes="[10, 20, 30, 40]" 设置每页可选的数量。
:page-size="pageSize" 设置每页显示的数量。
layout="total, sizes, prev, pager, next, jumper" 设置分页布局。
:total="tableData.length" 设置总数据量。
方法:
handleSelectionChange(val) 处理行选择变化。
deleteItem(index) 删除指定行。
handleSizeChange(val) 处理每页显示数量变化。
handleCurrentChange(val) 处理当前页变化。

四、全部代码

<template>
    <div class="content-container" direction="vertical">
        <!-- input -->
        <div>
            <el-container class="content-row">
                <div class="input-tip">
                    文章标题:
                </div>
                <div class="input-field" style="width: 400px;">
                    <el-input v-model="queryParam.words"></el-input>
                </div>
                <el-button type="primary" @click="getBlogList">筛选</el-button>
                <el-button type="danger" @click="clear">清空筛选</el-button>
            </el-container>
        </div>
        <!-- list -->
        <div>
            <el-tabs type="card" @tab-click="handleClick">
                <el-tab-pane label="全部"></el-tab-pane>
                <el-tab-pane v-for="(item,index) in blogCategorys"
                 :key="index"
                 :label="item.title"
                 :name="item.id">
                </el-tab-pane>
            </el-tabs>
            <el-table
            ref="multipleTable"
            :data="postList"
            tooltip-effect="dark"
            style="width: 100%"
            fit
            :pagination="pagination"
            @selection-change="handleSelectionChange" >
                <el-table-column
                type="selection"
                width="55">
                </el-table-column>
                <el-table-column
                label="ID"
                width="100"
                prop="id">
                </el-table-column>
                <el-table-column
                label="标题"
                width="450"
                prop="title">
                </el-table-column>
                <el-table-column
                label="是否置顶"
                width="100"
                prop="isTop">
                </el-table-column>
                <el-table-column
                label="热度"
                width="100"
                prop="viewsCount">
                </el-table-column>
                <el-table-column
                label="发布时间"
                width="200"
                prop="pubTime">
                </el-table-column>
                <el-table-column
                label="操作"
                >
                    <template #default="scope">
                        <el-button size="mini" type="danger" @click="deleteItem(scope.$index)">删除</el-button>         
                    </template>     
                </el-table-column>
            </el-table>
            <div class="pagination-container">
                <el-pagination
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                    :current-page="pagination.currentPage"
                    :page-sizes="[10, 20, 30, 40]"
                    :page-size="pagination.pageSize"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="pagination.total">
                </el-pagination>
            </div>
        </div>
    </div>
</template>

<style scoped>
.pagination-container {
  margin-top: 20px;
  text-align: center;
}
</style>

<script>
import {getBlogList,getBlogCategory} from '@/api' 
export default {
    data() {
        return {
            // 博客文章列表数据
            postList:[],
            // 筛选博客的参数
            queryParam:{
                words:"",
                cateid:"",
                tag:"",
                search:"",
                page:1,
                size:10
            },
            // 分页
            pagination: {
                currentPage: 1, // 当前页
                pageSize: 10, // 每页显示条数
                total: 0, // 总条数
                layout: 'total,sizes,prev, pager, next, jumper', // 分页布局
            },
            // 博客分类
            blogCategorys:[],
            // 当前选中的博客分类
            selectCategory:"",
            // 当前选中的博客文章
            multipleSelection:[]
        }
    },
    mounted () {
        this.getBlogList();
        this.getBlogCategory();
    },
    // 路由更新时刷新数据
    beforeRouteUpdate (to) {
        this.getBlogList();
        this.getBlogCategory();
    },
    methods : {
        // 获取博客文章列表数据
        getBlogList() {
            getBlogList(this.queryParam).then(res => {
                this.postList = res.data.items
                this.pagination.total = res.data.total
                this.pagination.currentPage= res.data.page
                    console.log(res.data)
                }).catch(err => {
                    console.log(err)
                })
        },
        // 获取博客分类数据
        getBlogCategory() {
            getBlogCategory().then(res => {
                this.blogCategorys = res.data
                console.log(res)
            }).catch(err => {
                console.log(err)
            })
        },
        // 改变分页大小
        handleSizeChange(val) {
            this.pagination.pageSize = val;
            this.queryParam.size = val;
            this.getBlogList(); 
        },
        // 跳到当前页 
        handleCurrentChange(val) {
            this.pagination.currentPage = val;
            this.queryParam.page = val;
            this.getBlogList();
        },
        // 切换Tab 刷新数据
        handleClick(tab) {
            this.queryParam.cateid = tab.props.name
            this.getBlogList();
        },
        // 清空筛选项
        clear() {
            this.queryParam.words=""
            this.getBlogList();
        },
       
    }
}
</script>

五、效果

elementplus表格
表格展示及数据分页是前端开发常用的功能,通过vue3+elementplus能够快速是实现对数据的展示及分页。


博客地址:http://xiejava.ishareread.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode3 无重复字符的最长子串

思路 双指针 易错点 什么时候更新长度 除了每次有重复的要更新 &#xff0c;如果abc这种&#xff0c;本身就不会重复&#xff0c;那maxLength就永远不会更新了。 思路不对 left不应该是1&#xff0c;对于abca&#xff0c;是1 对于 abcc,应该直接加3&#xff0c;所以需要记…

Python 从入门到实战4(序列的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了python 中列表的简单操作&#xff0c;…

Codeforces Round 107 (Div. 1) A. Win or Freeze (博弈论 + 数论*1400)

如果一个数是质数或者是1&#xff0c;那么一定是先手获胜&#xff0c;因为不能操作。 我们知道&#xff0c;一个数一定可以由 p 1 k 1 ∗ p 2 k 2 ∗ p 3 k 3 … p_{1}^{k_1}*p_{2}^{k_2}*p_3^{k_3}\dots p1k1​​∗p2k2​​∗p3k3​​…来唯一表示&#xff0c;那么我们就可以…

从入门到精通:掌握 CMD 与 PowerShell 之间的秘密

在日常使用 Windows 系统时&#xff0c;很多人都习惯于打开 CMD&#xff08;命令提示符&#xff09;来执行各种操作&#xff0c;从简单的文件管理到复杂的脚本编写&#xff0c;CMD 作为一个经典的工具确实陪伴我们走过了漫长的岁月。然而&#xff0c;随着系统管理需求的提升和自…

什么是EDR、NDR、MDR、XDR?他们之间什么区别?

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 概述 EDR是什…

opencv之图像平滑处理

文章目录 前言1.什么是平滑处理2.均值滤波2.1基本原理2.1 函数语法 3.方框滤波3.1基本原理3.2函数语法 4.高斯滤波4.1基本原理4.2函数语法 5.中值滤波5.1基本原理5.2 函数语法 6.双边滤波6.1基本原理 温馨提示 前言 **图像平滑处理是图像处理和计算机视觉领域中的一个核心技术…

yolov8改进策略,有可以直接用的代码,80余种改进策略,有讲解

YOLOv8改进策略介绍 YOLOv8是在YOLOv7的基础上进一步发展的目标检测模型&#xff0c;继承了YOLO系列模型的优点&#xff0c;如实时性、准确性和灵活性。然而&#xff0c;任何模型都有进一步改进的空间&#xff0c;以提高其性能、准确性和鲁棒性。下面是针对YOLOv8的一些改进策…

电容的分类

电容作为电子产品中不可或缺的元件&#xff0c;其种类繁多&#xff0c;各具特色。以下是电容的主要分类、作用及优缺点概述&#xff1a; 一、电容的分类 电容的分类方式多样&#xff0c;常见的分类方式包括按结构、用途、电解质类型及制造材料等。 按结构分类&#xff1a; 固…

搞懂奇偶校验

当我们有一串二进制的数据时&#xff0c;如何在这串二进制数据的最前面&#xff0c;或者最后面&#xff0c;添加一位的奇检验位或者偶校验位呢&#xff1f; &#xff08;1&#xff09;首先要明确使用什么校验&#xff1a;你使用奇校验&#xff0c;还是偶检验&#xff1f; &am…

使用 EasyExcel 高效读取大文件 Excel

使用 EasyExcel 高效读取大文件 Excel 的最佳实践 在现代应用中&#xff0c;数据处理经常涉及到大规模数据集的处理&#xff0c;Excel 作为一种常见的文件格式&#xff0c;经常用于数据导入和导出。然而&#xff0c;传统的 Excel 处理库如 Apache POI 在处理大文件时可能会面临…

基于Java+SpringBoot+Vue的植物健康系统

基于JavaSpringBootVue的植物健康系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345; 某信 gzh 搜索【智能编程小助手】获取项…

(学习总结15)C++11小语法与拷贝问题

C11小语法与拷贝问题 auto关键字范围forinitializer_list深拷贝与浅拷贝写时拷贝 以下代码环境为 VS2022 C。 auto关键字 在早期 C/C 中 auto 的含义是&#xff1a;使用 auto 修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;不过一般都会隐藏&#xff0c;导致…

科研绘图 - Python - 柱状图代码及展示

1 import pandas as pd import matplotlib.pyplot as pltstudents pd.read_excel(./Students.xlsx)print(----原始数据----) print(students)students.sort_values(by2017,inplaceTrue,ascendingFalse) students.plot.bar(xField,y[2016,2017],color[orange,red])plt.title(I…

【Redis】Redis 客户端开发与 Java 集成:RESP协议解析与实战操作

目录 客⼾端Redis Java使⽤ 样例列表引⼊依赖配置端⼝转发连接 Redis Server基础操作字符串操作列表操作哈希表操作集合操作有序集合操作访问集群 Redis Java 集成到 Spring Boot使⽤ Spring Boot 连接 Redis 单机创建项⽬配置 redis 服务地址创建 Controller使⽤ String使⽤ L…

华为OD机试真题 - 分割均衡字符串 - 贪心算法(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、…

集成电路学习:什么是GPIO通用输入输出

GPIO&#xff1a;通用输入输出 GPIO&#xff0c;全称General Purpose Input/Output&#xff0c;即通用输入/输出端口&#xff0c;是嵌入式系统中非常重要的基本硬件资源之一。以下是对GPIO的详细解析&#xff1a; 一、GPIO的定义与功能 GPIO是一种非常灵活的接口&#xff0c;可…

ping不通本地虚拟机的静态ip的解决方案

找到网络配置文件 一般我们设置虚拟机文件为静态IP地址&#xff0c; 比如 /etc/sysconfig/network-scripts/ifcfg-ens33 记住Gateway 192.168.200.2 查看虚拟网络编辑器 把子网ip改为192.168.200.0 前三部分相同&#xff0c;第四部分是0 把nat设置中的网关ip改成Gateway 1…

时空图卷积网络:用于交通流量预测的深度学习框架-1

摘要 准确的交通预测对于城市交通控制和引导至关重要。由于交通流的高度非线性和复杂性&#xff0c;传统方法无法满足中长期预测任务的需求&#xff0c;且往往忽略了空间和时间的依赖关系。本文提出一种新的深度学习框架——时空图卷积网络(STGCN)来解决交通领域的时间序列预测…

「MyBatis」图书管理系统 v1.0

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 图书管理系统 v1.0 &#x1f349;登录&#x1f349;图书操作&#x1f34c;图书类&#x1f34c;页面信息&#x1f34c;操作 &#x1f34…

Java中的经典排序算法:快速排序、归并排序和计数排序详解(如果想知道Java中有关快速排序、归并排序和计数排序的知识点,那么只看这一篇就足够了!)

前言&#xff1a;排序算法在计算机科学中占有重要地位&#xff0c;不同的算法适用于不同的场景。本文将深入探讨快速排序、归并排序和计数排序。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本文大致的讲解内…