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

news2024/11/18 9:47:46

近半年时间在接触vue写pc页面,文中内容即在实际的开发过程中遇到的实际问题。

1、问题交代:

在pc版的列表页面中,假设当前在列表的第一页,想要在当前页面选择几行数据,跳转到其他页面选择几行数据,选择后的数据页面展示为已勾选状态,经过跳转页面之后,数据选择状态依然存在,且可以将已选择的数据的id传到后端;即标题所述的实现多页多选、翻页回显问题 。示例图片如下:

下面第一个图为第一页选择的数据信息:

 下图为跳转到第二页选择数据的截图:

想达到的最终效果是这两个页面不管怎么跳转,都能显示跳转之前的选中状态。

2、实现的步骤

2.1  设置table标签

下面加粗字体是实现多页多选 翻页回显的必要设置,下面依次说明一下

<el-table size="small" :data="listData" ref="multipleTable" row-key="getRowKeys" @select="handleCheckBox" @select-all="handleSelectAll" highlight-current-row v-loading="loading" border element-loading-text="拼命加载中" style="width: 100%;">

      <el-table-column align="center" type="selection" width="60"></el-table-column>

el-table 标签中设置信息解读:

  • ref="multipleTable":ref是设置对这个el-table的引用,设置后可以在其他地方通过this.$refs.multipleTable 进行调用使用数据
  • row-key="getRowKeys":指定数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时,该属性是必填的。类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function
  • @select="handleCheckBox":指定用户手动勾选数据行的 Checkbox 时触发的事件,这个名称要和下面method中方法名对应上
  • @select-all="handleSelectAll":指定用户手动勾选全选 Checkbox 时触发的事件,这个名称要和下面method中方法名对应上

el-table-column标签中设置的信息解读:

  • type="selection":将el-table的第一列设置成显示多选框

2.2 定义记录选择的数组

在export default 的data()中进行定义数组,只展示了需要添加的代码

export default {

  data() {

    return {

               multipleSelection: [],

2.3 定义手动单选 和手动全选的函数/方法

在export defalt的method中编写下面函数方法: 

 //该方法是单选时的方法
 handleCheckBox(rows, row) {      
   if (this.multipleSelection.find((item) => item == row.case_id)) {
      //下面这个filter方法就是删除的方法
      this.multipleSelection = this.multipleSelection.filter(
        (item) => item != row.case_id
      );
    } else {
      this.multipleSelection.push(row.case_id);
    },

 //该方法是当页全选的方法
 handleSelectAll(rows) {
    if (rows.length) {
      rows.forEach((row) => {
        if (!this.multipleSelection.find((item) => item == row.case_id)) {
          this.multipleSelection.push(row.case_id);
        }
      });
    } else {
      this.listData.forEach((row) => {
        this.multipleSelection = this.multipleSelection.filter(
          (item) => item != row.case_id
        );
      });
    }
  },

//下面的方法是进行设置行标识key的方法
getRowKeys(row) {
    return row.case_id
}

2.4 写控制回显部分代码

因为在实现分页的时候使用了分页组件,即每次翻页都会调用后端的list方法去查询这个页面的数据信息,所以回显的逻辑要方法每次调用后端数据的逻辑中,代码如下:

getdata(parameter) {
      this.loading = true
      /***
       * 调用后端接口
       */
      TestCaseList(parameter)
        .then(res => {
          this.loading = false
          if (res.success == false) {
            this.$message({
              type: 'info',
              message: res.msg
            })
          } else {
            this.listData = res.data
            // 分页赋值
            this.pageparm.currentPage = this.formInline.page
            this.pageparm.pageSize = this.formInline.limit
            this.pageparm.total = res.count
            //这里是回显的功能代码 当切换页面的时候 会重新调用list方法,在这个位置进行判断这个数据是否回显
            this.$nextTick(()=>{
            this.listData.forEach((item,index)=>{
              if(this.multipleSelection.findIndex(v=>v == item.case_id) >= 0){
                this.$refs.multipleTable.toggleRowSelection(
                    this.$refs.multipleTable.data[index],
                    true
                );
              }
            })
            console.log('这里是每次查询list接口之后的操作,看看是否回显');
            console.log("multipleSelection=", this.multipleSelection);
          })
          }
        })
        .catch(err => {
          this.loading = false
          this.$message.error('菜单加载失败,请稍后再试!')
        })
    },

 具体功能实现讲解:

this.$nextTick(()=>{

            this.listData.forEach((item,index)=>{

              if(this.multipleSelection.findIndex(v=>v == item.case_id) >= 0){

                this.$refs.multipleTable.toggleRowSelection(

                    this.$refs.multipleTable.data[index],

                    true

                );

              }

            })

实现功能就是每次调用完后端的list接口,判断查出来的case_id是否有在multipleSelection数组中的,在数组中意味着要显示成已选中的状态,通过ref调用table数据 调用toggleRowSelection()方法实现,即上面加粗部分代码;

以上几个步骤将如何实现的过程已完全描述,如有不懂可以交流哦 

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

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

相关文章

【微信小程序】-- 全局数据共享 - MobX(四十三)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

利用CSS在图片中添加文字

前端项目中想要在图片中添加文字&#xff0c;方法有两种&#xff1a;1、js&#xff1b;2、css。第一种方法比较复杂&#xff0c;主要是写将图片与文字组合成新的图片的js代码&#xff0c;第二种方法简单粗暴&#xff0c;这里只讲第二种方法。 利用css在图片中添加文字&#xff…

关于npm i 的那点事

在我们开发中会经常用到npm i 这个命令&#xff0c;有npm i -S&#xff0c;npm i -g , npm i -D&#xff0c;npm install --save-dev, npm i -save&#xff0c;那么这几种命令到底有什么区别呢&#xff1f; 要先知道这几种命令的区别&#xff0c;我们首先要认识两个单词&#…

vue3的tsx写法(v-show、v-if、v-for、v-bind、v-on),父子组件传值

1、如下就是vue3的tsx写法&#xff0c;tsx写法中支持使用v-show&#xff0c;如下&#xff1a; import {ref} from vuelet appData ref<string>(); let flag false; const renderDom () > {return (<div><input type"text" v-model{appData.val…

详细教会你在vue中写jsx

目录 前言&#xff1a; 一、用render函数写一个页面&#xff1a; 二、在render函数注册事件 三、vue指令在render函数是怎么代替的&#xff1a; 1、v-if 2、v-show 3、v-for: 4、v-model&#xff1a; 5、.sync 四、render中插槽的使用 1、默认插槽 2、具名插槽 3、作…

Less预处理——初识Less

系列文章目录 文章目录系列文章目录一、Less 简介二、安装 Easy LESS三、第一个小例子一、Less 简介 Less 是一门 CSS 预处理语言&#xff0c;它扩充了 CSS 语言&#xff0c;增加了诸如 变量、混合&#xff08;mixin&#xff09;、函数 等功能&#xff0c;让 CSS 更易维护、方…

react-router-dom V6

目录 1. 前言 2. 变更概览 将 Switch 升级为 Routes 路由匹配组件参数 由 component 改为 element 相对路径识别&#xff08;子路由不需要补全父路由的path&#xff0c;react会自动补全&#xff09; 用 useNavigate 替代 useHistory 废弃 Redirect 标签&#xff0c;使…

Vue基础笔记

创建一个Vue应用 1.应用实例 每个Vue应用都是通过createApp函数创建一个新的应用实例 import { createApp } from vue const app createApp({ //根组件选项}) 2.根组件 若使用的是单文件组件&#xff0c;可直接从另一个文件中导入根组件 import {createApp } from vue import …

Vue3通透教程【十】跨级组件通讯—依赖注入

文章目录&#x1f31f; 写在前面&#x1f31f; provide函数&#x1f31f; inject 函数&#x1f31f; 跨组件通讯&#x1f31f; 写在最后&#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相…

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener的一个独特解决方法

除了网上所说的各种类型的解决方案&#xff0c;还有一种解决方案。 1、在pom.xml中添加一句 <packaging>war</packaging> 2、重新配置tomcat&#xff0c;选择war 3、确保web的路径是对的 file-->project structure 如果3处标红了 改为web文件夹的正确路径即可…

html网站video标签blob视频如何下载

在淘宝或tdtu知乎等有时想下载里面的视频资源&#xff0c;看了一下视频标签里的video不是MP4格式url,而是bloburl的方式。 是blob:https并不是一种协议&#xff0c;而是html5中blob对象在赋给video标签后生成的一串标记&#xff0c;blob对象对象包含的数据&#xff0c;浏览器内…

v-model的双向数据绑定实现原理(附:案例和项目实例)

一. 前言。 相信对使用vue框架的童靴来说&#xff0c;v-model的使用都能信手沾来&#xff0c;熟悉的不能再熟悉&#xff0c;也都知道v-model其实是个语法糖。不过其究竟是怎么实现的双向数据绑定&#xff0c;很大一部分童靴还是心存疑虑。本文就根据最简单的案例和基于实际项目…

Npm link的作用与使用

一、为什么要用Npm link 库包在开发或迭代后&#xff0c;不适合发布到线上进行调试&#xff08;过程繁琐且会导致版本号膨胀&#xff09; 二、Npm link工作原理 npm link 可以帮助我们模拟包安装后的状态&#xff0c;它会在系统中做一个快捷方式映射&#xff0c;让本地的包就…

前端实战|React18项目启动——pc端极客园项目前置准备

欢迎来到我的博客 📔博主是一名大学在读本科生,主要学习方向是前端。 🍭目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 🛠目前正在学习的是🔥 R e a c t 框架 React框架 Reac

web前端作业--响应式美食菜谱网页设计(HTML+CSS+JavaScript+)实现

原始HTMLCSSJS页面设计, web大学生网页设计作业源码&#xff0c;这是一个不错的美食菜谱网页设计制作&#xff0c;非常适合初学者学习使用。 网页实现截图&#xff1a;文末获取源码 网站首页&#xff1a; 菜谱&#xff1a; 美食达人&#xff1a; 手机版效果&#xff1a; 主要…

echarts如何画地图

前情提要 用echarts画地图的方式有两种 通过真实的地图来画(百度地图、google地图、或者其它某种地图软件)去拿到某块区域的json文件来画第一种方式,可以前往 https://blog.csdn.net/glorydx/article/details/127656301查看具体如何实现 echarts 获取json文件来画地图 如…

Web of science简单使用

下面本人以使用经历简单介绍下该数据库使用&#xff0c;鉴于登录地址/学校端口等原因&#xff0c;页面信息会有出入&#xff0c;有不足之处还望大家多多补充哈&#xff08;o^o&#xff09;&#xff01; 一&#xff0e;登录方式 1.高校官网&#xff08;内网&#xff09;-图书馆…

史上无敌的超级详细的Node Js 环境搭建步骤

今日分享内容 一、Node Js 环境搭建 1、Node.js是什么&#xff1f; 2、npm是什么&#xff1f; 3、环境搭建步骤: 二、Element简介 一、Node Js 环境搭建 1、Node.js是什么&#xff1f; Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]。 Node.js使用了一个事件驱…

前端学习之HTML

目录 1. 什么是HTML&#xff1f; 2. HTML专业的开发工具有哪些&#xff1f; 3. 是谁制定了HTML? 4. HTML的简单特性 5. 基本标签的介绍 6. 表格 7. 表格中单元格的合并 8. 背景颜色和背景图片 9. 图片 10. 超链接 11.列表 12. Form表单*** 1. 什么是HTML&#xff1f…

vue3版本网页小游戏

目录 1.前言 2.实现过程 2.1目录 2.2文件介绍 3.核心逻辑分步骤详解 4.总结 1.前言 最近火爆全网的羊了个羊小程序&#xff0c;背景是根据官方介绍&#xff0c;“羊了个羊”是一款闯关消除小游戏&#xff0c;通关率不到0.1%。主要玩法为重叠的各类方块&#xff0c;需要在…