小谢第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 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 关键词:状态 ...
随机推荐
- (三)解决httpclient乱码
原文链接:https://blog.csdn.net/justry_deng/article/details/81042379
- 使用IDEA+Gradle构建Spring5源码并调试(手把手教程全图解)
一.前言 说一说我要写这篇文章的初衷吧,前段时间有小伙伴在微信群求教怎样构建spring源码,他在网上找了n个教程跟着后面花了两天时间都没构建好,正好我最近因工作原因从mac换成windows,开 ...
- MyBatis入门学习-连接oracle实现CURD基本操作
目录 前言 导入oracle库 配置 环境配置 配置引用 配置映射 查询 单条件查询 多条件查询 通过类字段传递参数 通过Map接口传参 Param注解 插入 更新 删除 字段映射 参考文献 前言 本 ...
- android自定义控件onMeasure方法
1.自定义控件首先定义一个类继承View 有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/ ...
- ant +jmeter+jenkins接口自动化测试二
[Jmeter篇]Jmeter+Ant+Jenkins接口自动化测试集成之半路逆转(二) 橙子探索测试发表于橙子探索测试订阅 72 [Jmeter篇]jmeter+Ant+Jenkins接口自动化测试 ...
- 一条update SQL语句是如何执行的
一条更新语句的执行过程和查询语句类似,更新的流程涉及两个日志:redo log(重做日志)和binlog(归档日志).比如我们要将ID(主键)=2这一行的值加(c:字段)1,SQL语句如下: upda ...
- IntelliJ IDEA 2018.3.6 安装、激活 JRebel
在 IntelliJ IDEA 2018.3.6 中安装## JRebel 1.代开 IDEA 开发工具,然后用快捷键 Ctrl+Alt+S 打开设置并搜索 jrebel 插件 2.安装 jrebel ...
- dup与dup2函数
依赖的头文件 #include <unistd.h> 函数定义 int dup(int oldfd); int dup2(int oldfd, int newfd); 函数作用 dup和d ...
- 多核CPU硬件架构介绍
转自:http://book.51cto.com/art/201004/197196.htm SISD.MIMD.SIMD.MISD计算机的体系结构 1. 计算平台介绍 Flynn于1972年提出了计 ...
- Java 从入门到进阶之路(二十九)
在之前的文章我们已经可以对本地对文件和目录进行新建和删除等操作,接下来我们来对文件内对具体内容进行操作. 如下代码,我们实现了一个基本的文件写入: /** * java.io.RandomAccess ...