小谢第36问:elemet - table表格修改后表格行高亮显示且定位到当前行当前页
第一次做这个需求得时候很乱,总是在表格页和修改页徘徊,总觉得什么都会,但是就是做不出自己想要得效果
其实如果先把思路搞清楚,这个问题得知识点却是不多,以下是我对表格高亮显示得思路:
首先,我会从已知得表格table中得到我需要更改得行对象- 可以用row-click方法直接获取也可以用table得selec方法
然后通过路由传参,将table数组和获取得行对象传递给修改页面-因为在返回页面得时候定位当前行和页,因此这里也要将pagesize和currentPage进行传递
modifyDesc(row) {
let params = {
id: row.id,
codeId: row.codeId,
table: this.tableData,
totalPage: this.total,
pageSize: this.pageSize,
};
window.sessionStorage.setItem('editAlarmDesc', JSON.stringify(params));
this.$router.push({
name: 'modifyDesc',
query: {
table: JSON.stringify(this.tableData),
totalPage: this.total,
pageSize: this.pageSize,
currentPage: this.pageNum,
id: row.id,
codeId: row.codeId,
}
});
},
此处可以用query或者params传参,query会把传的参数拼接到url上,造成很乱得感觉,所以我选择params传递参数,为了防止刷新页面后数据不存在,在传参之前我会把table和行数据用session存储一下
下一步是对修改页面得操作--1、定义空对象将当前页面得值赋值,2、对比当前对象id和传入数组,去除相同得id对象,3、拿到当前对象得下标,4、返回表格页面,传递参数
modifyDescSave(){
this.updatedUser = this.ruleForm;
let tableIndex = 0;
let table = JSON.stringify(this.$route.query) !== '{}' ? JSON.parse(this.$route.query.table) : JSON.parse(sessionStorage.getItem('editAlarmDesc')).table;
table.forEach((item, index) => {
if(item.id === this.updatedUser.id){
table.splice(index, 1, this.updatedUser);
tableIndex = index;
}
});
this.$router.push({
name: 'alarmDesc',
params: {
newData: JSON.stringify(table),
totalPage: this.$route.params.totalPage || JSON.parse(sessionStorage.getItem('editAlarmDesc')).totalPage,
pageSize: this.$route.params.pageSize || JSON.parse(sessionStorage.getItem('editAlarmDesc')).pageSize,
currentPage: this.$route.params.currentPage || JSON.parse(sessionStorage.getItem('editAlarmDesc')).currentPage,
search: this.$route.params.search || JSON.parse(sessionStorage.getItem('editAlarmDesc')).search,
firstTop: true,
index: tableIndex
}
});
},
在跳转页面之前记得清除session哦
beforeRouteLeave (to, from, next) {
// 判断数据是否修改,如果修改按这个执行,没修改,则直接执行离开此页面
if (this.updateCount > 0) {
// 登陆超时及注销时不显示此弹框
if(sessionStorage.getItem('isTimeOut') === 'false' && Auth.getJwtToken()) {
this.$my_confirm('确定后将不保存当前数据,直接关闭当前页面!确定要离开当前页面吗?', '提示').then(() => {
//点确定
next();
sessionStorage.removeItem('editAlarmDesc');
}).catch(() => {
//点取消
next(false);
sessionStorage.removeItem('editAlarmDesc');
});
} else {
next();
sessionStorage.removeItem('editAlarmDesc');
}
} else {
next();
}
},
最后是我们返回页面得要求:表格当前行高亮显示并定位到当前页面,此处我实在mounted进行接收,判断路由参数是否存在,如果不存在进行正常得请求操作,如果存在将传递得路由参数将表格以及页面相关值一一赋值
if (JSON.stringify(this.$route.params) !== '{}') {
this.tableData = JSON.parse(this.$route.params.newData);
this.pageSize = Number(this.$route.params.pageSize);
this.pageNum = Number(this.$route.params.currentPage);
this.firstTop = this.$route.params.firstTop;
this.countAlarmCodeByLevel();
this.totalNum = Number(this.$route.params.totalPage);
this.total = Number(this.$route.params.totalPage);
} else {
this.getTable().then(() => {
this.countAlarmCodeByLevel();
});
}
进行到当前得这一步我们得表格已实现定位操作,剩下得是表格当前行得渲染,我主要用了
tableRowClassName({ row, rowIndex }) {
let bg = '';
this.multipleSelection.forEach(item => {
if (row.id === item.id) {
bg = 'ioms-table-check-class';
}
});
if (JSON.stringify(this.$route.params) !== '{}' && this.firstTop) {
let query = JSON.parse(this.$route.params.newData);
if(query && query.length > 0) {
if(this.$route.params.index) {
query[this.$route.params.index].id === row.id && (bg = 'ioms-table-new-class');
} else{
query[0].id === row.id && (bg = 'ioms-table-new-class');
}
}
}
return bg;
},
其实仔细看来,在高亮显示的过程中对技术要求并不高,如果思路清晰,问题不大
小谢第36问:elemet - table表格修改后表格行高亮显示且定位到当前行当前页的更多相关文章
- 小谢第10问:前端JS下载文件、表格
对于小型文件及表格下载,一般采用a标签形式 <buttonb @click="downloadTemplate()">模板下载</button> downl ...
- 小谢第37问:关于websocket推送进度,本地保存进度条,然后跳出页面进入后再显示的问题
1.主要技术点:sessionStorage 会话存储进度 这里在使用之前,顺便说一下cookie.sessionStorage.localStorage 共同点:都是保存在浏览器端,且同源的. 区别 ...
- 小谢第8问:ui框架的css样式如何更改
目前有三种方法, 1.使用scss,增加样式覆盖,但是此种方法要求css的className需要与框架内的元素相一致,因此修改时候需要特别注意,一个父级的不同就可能修改失败 2.deep穿透,这种方法 ...
- 小谢第7问:js前端如何实现大文件分片上传、上传进度、终止上传以及删除服务器文件?
文件上传一般有两种方式:文件流上传和base64方式上传,毫无疑问,当进行大文件上传时候,转为base64是不现实的,因此用formData方式结合文件流,直接上传到服务器 本文主要结合vue的来讲解 ...
- 小谢第6问:js中,filter函数是怎么使用的
数组的常用方法filter,今天在做数组筛选的时候用到需要将有重复的数组去除,因此用到这个函数,主要用到-- 选择需要的属性,最终留下想要的数组,如果刚开始的话可以看下下面代码 let nums = ...
- 小谢第2问:后端返回为数组list时候,怎么实现转为tree
要求后端返回给我的list时候,在数组中定义有id , parentid, 可以用双重循环的方法,得到tree需要的数据结构,这样得到的数据就可以直接复制给树组件的data啦const oldData ...
- 小谢第1问:为什么要写blog
一直犹豫了好久,终于在csdn上弄好了自己的博客账号,感谢平台,以后在工作的过程中,遇到不懂得问题,解决后,会在这里记录下自己所遇到的问题
- 小谢第23问: chorme的性能优化工具
问题场景:在前端日趋工程化的今天,前端性能优化是一名合格的前端工程师必备的技能,那么,如何正确的使用性能分析工具呢? 解决方案: 性能分析的流程: 在开发中我一般使用公司开发的测试脚本-kbase-w ...
- 小谢第50问:vuex的五个属性-使用-介绍
一.Vuex 是什么? 官网:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 关键词:状态 ...
随机推荐
- PyCharm罢工并向你丢出了pip升级需求
一.事件缘由 最近在搞接口自动化框架,基于python自然少不了使用PyCharm.本来都是 在解决脚本上遇到的坑,突然出现了第三方库安装失败,这感觉就像大热天吃到 冰激凌,昏沉的脑袋瞬间清醒许多. ...
- 商城04——门户网站介绍&商城首页搭建&内容系统创建&CMS实现
1. 课程计划 1.门户系统的搭建 2.显示商城首页 3.内容管理系统的实现 a) 内容分类管理 b) 内容管理 2. 门户系统的搭建 2.1. 什么是门户系统 从广义上来说,它将各种应用系 ...
- 【K8s学习笔记】K8s是如何部署应用的?
本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...
- vue 组件传参及跨域传参
可以完成跨组件传参的四种方式 // 1) localStorage:永久存储数据 // 2) sessionStorage:临时存储数据(刷新页面数据不重置,关闭再重新开启标签页数据重置) // 3) ...
- C# 人脸识别库
.NET 人脸识别库 ViewFaceCore 这是基于 SeetaFace6 人脸识别开发的 .NET 平台下的人脸识别库这是一个使用超简单的人脸识别库这是一个基于 .NET Standard 2. ...
- 3dTiles 数据规范详解[2] Tileset与Tile
转载请声明出处:全网@秋意正寒 https://www.cnblogs.com/onsummer/p/13128682.html 一.一个简单的3dTiles数据示例 上图是一份 3dTiles数据集 ...
- emacs-显示行号以及跳转到指定行
[显示行号]M+x display-line-number-mode <Return> [跳转行号]M+x goto-line 然后输入你想跳转到的行号 <Return> (在 ...
- 使用TransferLearning实现环视图像的角点检测——Tensorflow+MobileNetv2_SSD
环境说明 依赖环境安装eIQ官方指南: name: eiq_auto channels: - conda-forge - defaults dependencies: - numpy=1.18.1=p ...
- 二叉搜索树的后序遍历序列(剑指offer-23)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 题目解析 采用分治法的思想,找到根结点.左子树的序 ...
- python入门009
目录 四.列表 1.定义:在[]内,用逗号分隔开多个任意数据类型的值 2.类型转换:但凡能被for循环遍历的数据类型都可以传给list()转换成列表类型,list()会跟for循环一样遍历出数据类型中 ...