vue如何基于el-table实现多页多选及翻页回显过程

yizhihongxing

实现多页多选及翻页回显的关键在于要在不同页之间共享数据。Vue.js提供了一些辅助方法来进行数据处理和页面渲染。我们可以使用Vue.js的计算属性和方法来实现该功能。

步骤一:设置选中项和分页

首先,我们需要在Vue实例中通过数据来记录选中的项和当前页数,具体代码如下:

<template>
  <el-table
    :data="tableData"
    v-loading="loading"
    :row-key="row => row.id"
    :columns="columns"
    @selection-change="handleSelectionChange">
  </el-table>
  <el-pagination v-model="currentPage" :page-size="pageSize" :total="total"></el-pagination>
</template>

<script>
export default {
  data () {
    return {
      tableData: [], // data for el-table
      columns: [], // columns for el-table
      loading: false,
      currentPage: 1, // 当前页数
      pageSize: 20, // 每页数量
      total: 0, // 总数
      selections: [] // 当前页已选项
    }
  },

  ...

在el-table中,我们使用@selection-change事件来监听选中项的变化,在每次变化时记录下当前页已选项。当页面切换时,我们需要根据当前页数来切换选中项。为了方便起见,我们可以通过计算属性来自动计算当前页的数据和已选项:

computed: {
  // 当前页的数据
  currentPageData () {
    const start = (this.currentPage - 1) * this.pageSize
    const end = start + this.pageSize
    return this.tableData.slice(start, end)
  },
  // 当前页选中项
  currentSelections () {
    return this.selections.filter(item => this.currentPageData.some(row => row.id === item.id))
  }
},

步骤二:渲染选中项

在el-table中,默认情况下,选中的行将突出显示,但是,由于我们需要支持多页选中项,因此我们需要在每行的第一列添加一个复选框来显示已选状态,并实现多选功能。为此,我们需要通过slot-scope来自定义插槽,并添加一个<el-checkbox>来实现选中状态。具体代码如下:

<el-table-column width="55" type="selection">
  <template slot-scope="scope">
    <el-checkbox v-model="scope.row._checked" @change="changeSelection"></el-checkbox>
  </template>
</el-table-column>

这里的v-model绑定了每行的选中状态,@change事件监听选中状态变化,我们可以在该事件中实时更新选中项的状态。

步骤三:翻页回显

最后,我们需要处理翻页回显的功能。当用户选择项跨越多页时,我们需要在切换页面时保持选中状态。为此,我们可以在currentPage变化时更新当前页已选项。具体代码如下:

watch: {
  currentPage (newVal) {
    // 选中项回显
    this.selections = [...this.selections.filter(item => this.currentPageData.some(row => row.id === item.id)), ...this.currentSelections]
  }
},

这里的watch监听了currentPage的变化。当变化时,我们首先过滤出当前页已选项中已经被选中的选项,然后将它们合并到所有选中项中,以实现选中状态的保持。

示例说明

示例一:基于el-table的多页多选及翻页回显

基于上述步骤,我们可以实现一个基于el-table的多页多选及翻页回显示例。该示例支持多页选中项,翻页回显及批量删除功能。你可以在以下链接中查看完整代码:

https://github.com/Hanqing1996/vue-el-table-pagination-demo

示例二:基于el-table的远程数据分页及多选

在实际项目中,我们通常需要从远程服务器获取数据并进行分页处理。基于上述步骤,我们可以实现一个远程数据分页及多选的示例。该示例支持每页选择数量及分页展示功能,并且通过发起AJAX请求来实现数据的获取和分页。你可以在以下链接中查看完整代码:

https://github.com/Hanqing1996/vue-el-table-axios-pagination-demo

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue如何基于el-table实现多页多选及翻页回显过程 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作

    下面就给您详细讲解一下“Vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作”的完整攻略。 什么是Vue双击事件2.0事件监听 Vue双击事件是指在Vue框架中注册的鼠标单击事件,在间隔一定时间后再次点击鼠标,使其触发双击事件的一种事件处理方式。在Vue 2.0版本中,双击事件具有更高的可定制性和可扩展性。 点击事件 在Vue中,可以通过 v…

    Vue 2023年5月29日
    00
  • vue初尝试–项目结构(推荐)

    下面是针对“Vue初尝试–项目结构(推荐)”的完整攻略: 1. 什么是Vue Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设计为可以逐层应用。Vue的核心库只关注视图层,非常容易学习和集成,同时也可以通过插件或结合其他库来构建完整的单页应用。 2. Vue项目结构推荐 下面,我们来看一下Vue项目的结构推荐: ├── buil…

    Vue 2023年5月29日
    00
  • vue-cli脚手架初始化项目各个文件夹用途

    当使用Vue.js来开发项目时,可以使用Vue CLI脚手架工具来初始化项目。通过Vue CLI初始化的项目,会自动创建多个文件夹和文件,它们的用途如下: /public 文件夹:该文件夹下存放的是一些静态文件,如图标和页面。其中,/public/index.html 文件是整个应用的入口文件,是应用的模板。 /src 文件夹:该文件夹是主要的开发目录,包含…

    Vue 2023年5月27日
    00
  • vue 的 solt 子组件过滤过程解析

    Vue 中的 Slot 是一种非常有用的机制,可以让我们在组件内部定义一些占位符,然后在组件的使用者里面填充具体的内容。Slot 过滤是在填充内容时,可以根据组件中的一些条件特意选择一个 Slot 进行填充,也可以不填充。 要实现 Slot 过滤,我们需要使用 Vue 中的 v-slot 指令,并使用 name 属性为 Slot 指定名称,如下: <!…

    Vue 2023年5月29日
    00
  • Vue子组件内的props对象参数配置方法

    下面将详细讲解“Vue子组件内的props对象参数配置方法”的完整攻略。 一、props对象简介 在Vue中,组件的数据流动一般是自上而下的,即父组件向子组件传递数据,子组件只能通过父组件传递过来的props属性接收数据,并且无法在子组件内修改这些属性的值。props属性是允许在父组件中指定的自定义特性,在模板中使用时,它需要和 v-bind 指令一起使用。…

    Vue 2023年5月27日
    00
  • vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作

    使用vuex作为全局状态管理器,可以让我们更好地管理组件之间的数据共享。然而,在使用vuex时,我们也会遇到一些坑,其中最常见的就是修改vuex中的数据后,组件中的页面没有及时地渲染。以下为使用vuex时如何避免这些问题的攻略: 1. 避免直接处理vuex状态 直接修改vuex中的状态,可能会导致状态与组件的同步问题。我们应该使用mutation来修改状态。…

    Vue 2023年5月29日
    00
  • vue页面使用多个定时器的方法

    下面是关于Vue页面使用多个定时器的方法的详细攻略: 一、前置知识 在使用Vue页面多个定时器之前,需要掌握以下知识: Vue.js的生命周期钩子函数:created、mounted、updated、destroyed setInterval和clearInterval的用法 二、方法一:使用Vue.js的watch属性 如果在Vue组件中同时使用多个定时器…

    Vue 2023年5月29日
    00
  • ES6中的class是如何实现的(附Babel编译的ES5代码详解)

    下面是详细讲解 “ES6中的class是如何实现的(附Babel编译的ES5代码详解)” 的攻略。 前言 ES6中的class是一种新的语法糖,它提供了一种更简单、更语义化的方式来声明类,让编写面向对象代码更加方便。本文将介绍class的语法和原理,并附上Babel编译后的ES5代码做详解。 class语法 首先我们来看一下class的语法: class P…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部