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

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

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

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

Snipaste_2022-08-16_22-19-24

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

渲染表格

表格这块当然是<el-table>,它有几个属性.

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

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

    <el-table
      v-if="tableData.length > 0"
      height="500px"
      :data="tableData"
      style="width: 100%"
    >
      <el-table-column prop="id" label="序号" width="100"> </el-table-column>
      <el-table-column prop="date" label="创建时间" width="250">
        <template slot-scope="scope">
          <i class="el-icon-time"></i>
          <span style="margin-left: 10px">{{ scope.row.date }}</span>
        </template>
      </el-table-column>
      <el-table-column prop="type" label="收支类型" width="150">
      </el-table-column>

      <el-table-column prop="crash" label="账户现金" width="170">
        <template slot-scope="scope">
          <i class="el-icon-s-finance"></i>
          <span style="color: #4db3ff">{{ scope.row.crash }}¥</span>
        </template>
      </el-table-column>

      <el-table-column label="操作" prop="operation">
        <template slot-scope="scope">
          <el-button
            type="primary"
            size="mini"
            plain
            icon="el-icon-edit"
            @click="handleEdit(scope.$index, scope.row)"
            v-if="user.identity == 'manager'"
            >编辑</el-button
          >
          <el-button
            type="danger"
            size="mini"
            icon="el-icon-delete"
            plain
            @click="handleDelete(scope.$index, scope.row)"
            v-if="user.identity == 'manager'"
            >删除</el-button
          >
        </template>
      </el-table-column>
    </el-table>

说明:

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

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

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

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

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

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

分页

我们可以找一个分页Pagination

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

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

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>

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

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", //翻页属性
},
  • 使用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>

这里注意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;
    });
},

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

  • 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;
    }
},
  • 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;
    });
},

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

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Vue.js中,使用Element UI组件库可以很方便地实现分页查询和条件查询。以下是一个简单的例子,可以帮助你理解如何使用Element UI组件库实现分页查询和条件查询: HTML代码: ``` <template> <div> <el-form :inline="true" :model="queryForm" class="query-form"> <el-form-item label="姓名"> <el-input v-model="queryForm.name"></el-input> </el-form-item> <el-form-item label="年龄"> <el-input v-model="queryForm.age"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="query">查询</el-button> </el-form-item> </el-form> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" :total="total"> </el-pagination> </div> </template> ``` JavaScript代码: ``` <script> export default { data () { return { queryForm: { name: '', age: '' }, tableData: [], currentPage: 1, pageSize: 10, total: 0 } }, methods: { query () { // 执行查询操作 this.getTableData() }, getTableData () { // 模拟异步请求数据 setTimeout(() => { // 根据条件查询数据 let data = this.data.filter(item => { return item.name.includes(this.queryForm.name) && item.age.includes(this.queryForm.age) }) // 计算分页数据 let start = (this.currentPage - 1) * this.pageSize let end = start + this.pageSize let pageData = data.slice(start, end) // 更新表格数据和分页信息 this.tableData = pageData this.total = data.length }, 1000) }, handleSizeChange (pageSize) { this.pageSize = pageSize this.getTableData() }, handleCurrentChange (currentPage) { this.currentPage = currentPage this.getTableData() } }, mounted () { // 初始化查询数据 this.getTableData() } } </script> ``` 在上面的代码中,我们使用了Element UI的el-form和el-table组件来实现条件查询和表格渲染。在el-form组件中,我们使用v-model指令来绑定查询条件到queryForm对象上,并在el-button组件中使用@click事件来触发查询操作。在el-table组件中,我们使用:data指令来绑定表格数据到tableData对象上,并使用el-table-column组件来定义表格列。最后,我们使用el-pagination组件来实现分页功能,并使用@size-change和@current-change事件来处理分页信息的变化。 在getTableData方法中,我们使用setTimeout模拟了一个异步请求数据的过程,并根据查询条件过滤数据。然后,我们根据当前页码和每页条数计算分页数据,并更新表格数据和分页信息。 希望这个例子能帮助你理解如何使用Element UI组件库实现分页查询和条件查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抗争的小青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值