草庐IT

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

抗争的小青年 2023-04-21 原文

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

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

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

这里呢我们就不给大家说顶栏和侧边栏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;
    });
},

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

有关Vue+element-ui实现表格数据渲染+分页的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  5. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  8. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  9. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

随机推荐