当前位置: 首页 > news >正文

vue2 element 实现表格点击详情,返回时保留查询参数

先直观一点,上图

列表共5条数据,准备输入Author过滤条件进行查询
在这里插入图片描述

进入查看详情页,就随便搞了个按钮,将就看吧
在这里插入图片描述
点击返回后
在这里插入图片描述

一开始准备用vuex做这个功能,后来放弃了,想到直接用路由去做可能也不错。有时间再整一套vuex版的,也很简单

<!--* @Author: chenhaoran* @Date: 2024-03-03 13:44:10* @LastEditors: chenhaoran* @LastEditTime: 2024-03-03 23:07:02
-->
<template><div class="app-container"><div class="search-area"><el-form :inline="true" :model="queryParams" class="demo-form-inline"><el-form-item label="Author"><el-input v-model="queryParams.author" placeholder="作者"></el-input></el-form-item><el-form-item label="Status"><el-select v-model="queryParams.status" placeholder="状态"><el-option label="发布" value="published"></el-option><el-option label="删除" value="deleted"></el-option><el-option label="草稿" value="draft"></el-option></el-select></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查询</el-button><el-button type="primary" @click="reset">重置</el-button></el-form-item></el-form></div><el-tablev-loading="listLoading":data="list"element-loading-text="Loading"borderfithighlight-current-row><el-table-column align="center" label="ID" width="95"><template slot-scope="scope">{{ scope.$index }}</template></el-table-column><el-table-column label="Title"><template slot-scope="scope">{{ scope.row.title }}</template></el-table-column><el-table-column label="Author" width="110" align="center"><template slot-scope="scope"><span>{{ scope.row.author }}</span></template></el-table-column><el-table-column label="Pageviews" width="110" align="center"><template slot-scope="scope">{{ scope.row.pageviews }}</template></el-table-column><el-table-column class-name="status-col" label="Status" width="110" align="center"><template slot-scope="scope"><el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag></template></el-table-column><el-table-column align="center" prop="created_at" label="Display_time" width="200"><template slot-scope="scope"><i class="el-icon-time" /><span>{{ scope.row.display_time }}</span></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button @click="doView(scope.row)" type="text" size="small">查看</el-button><el-button type="text" size="small">编辑</el-button></template></el-table-column></el-table></div>
</template><script>
import { getList } from '@/api/table'
// import { createNamespacedHelpers } from 'vuex'
// const { mapMutations, mapActions } = createNamespacedHelpers('queryParams')
export default {filters: {statusFilter(status) {const statusMap = {published: 'success',draft: 'gray',deleted: 'danger'}return statusMap[status]}},beforeRouteEnter(to, from, next) {// console.log('beforeRouteEnter:', from);/*** 官方文档是这样写明的:* -- start --* beforeRouteEnter 守卫不能访问this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。* 不过,你可以通过传一个回调给 next 来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数* beforeRouteEnter (to, from, next) {next(vm => {// 通过 `vm` 访问组件实例})}* -- end --* 重点是第二句话,说明是有方法给组件实例修改值的*//** 有问题的写法* const data = { testMsg: '测试信息'}* const saveData = data* next(vm => {* 在这里卡了很久,这样写的话,组件created抑或mounted里,可以访问data的属性,但却拿不到beforeRouteEnter中定义的属性*  //vm.saveData = saveData*  //vm.$set(vm, 'saveData', saveData)* * })* * 执行顺序:* beforeRouteEnter* beforeCreate* mounted* vm*/
// 有效处理let obj = {}if (from.name == 'itemDetail') {obj = from.params} else {obj = {}}next(vm => {/*** 在这里卡了很久后,尝试将设置value写入methods方法中使用vm来调用,* mounted拿不到beforeRouteEnter这里定义的变量,但是它可以访问vm实例的变量和方法* 再将beforeRouteEnter这定义的对象作为函数参数*/ vm.setFilterParams(obj)})},data() {return {list: null,listLoading: false,queryParams: {author: '',status: ''},}},created(){this.fetchData()},mounted() {// if (//   Object.keys(this.$store.state.queryParams.filterParams).length === 0// ) {//   this.queryParams = {//     // pageNum: 1,//     // pageSize: 10,//     author: '',//     status: ''//   };// } else {//   this.queryParams = JSON.parse(//     JSON.stringify(this.$store.state.queryParams.filterParams)//   );// }},methods: {// ...mapActions(["filterCache"]),setFilterParams(obj) {this.queryParams = Object.assign({},obj)this.fetchData()},fetchData() {this.listLoading = truelet queryParams = this.queryParamsgetList(queryParams).then(response => {this.list = response.data.itemsthis.listLoading = false})},// 查看doView(row) {this.$router.push({/* path与params不可同时出现 */// path: 'table/itemDetail',name: 'itemDetail',params: this.queryParams})},// 查询onSubmit() {// this.$store.dispatch("queryParams/filterCache", this.queryParams);// this.filterCache(this.queryParams)this.fetchData()},reset() {this.queryParams = {}this.fetchData()}}
}
</script>

上面重点部分就是beforeRouteEnter了:

beforeRouteEnter(to, from, next) {// console.log('beforeRouteEnter:', from);/*** 官方文档是这样写明的:* -- start --* beforeRouteEnter 守卫不能访问this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。* 不过,你可以通过传一个回调给 next 来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数* beforeRouteEnter (to, from, next) {next(vm => {// 通过 `vm` 访问组件实例})}* -- end --* 重点是第二句话,说明是有方法给组件实例修改值的*//** 有问题的写法* const data = { testMsg: '测试信息'}* const saveData = data* next(vm => {* 在这里卡了很久,这样写的话,组件created抑或mounted里,可以访问data的属性,但却拿不到beforeRouteEnter中定义的属性*  //vm.saveData = saveData*  //vm.$set(vm, 'saveData', saveData)* * })* * 执行顺序:* beforeRouteEnter* beforeCreate* mounted* vm*/
// 有效处理let obj = {}if (from.name == 'itemDetail') {obj = from.params} else {obj = {}}next(vm => {/*** 在这里卡了很久后,尝试将设置value写入methods方法中使用vm来调用,* mounted拿不到beforeRouteEnter这里定义的变量,但是它可以访问vm实例的变量和方法* 再将beforeRouteEnter这定义的对象作为函数参数*/ vm.setFilterParams(obj)})},
在这里插入代码片
<!--* @Author: chenhaoran* @Date: 2024-03-03 14:59:08* @LastEditors: chenhaoran* @LastEditTime: 2024-03-03 22:31:39
-->
<template><div class="item-detail"><el-button @click="handleClick">返回</el-button></div>
</template><script>
export default {name: 'itemDetail',data() {return {}},created() {// console.log(this.$route);},methods: {handleClick() {/*** go(-1): 原页面表单中的内容会丢失;* this.$router.go(-1):后退+刷新;* this.$router.go(0):刷新;* this.$router.go(1) :前进* * back(): 原页表表单中的内容会保留;在返回界面传递参数;* this.$router.back():后退 ;* this.$router.back(0) 刷新;* this.$router.back(1):前进* */this.$router.back()}},watch: {}
}
</script><style></style>

相关文章:

  • Windows Docker 部署 MySQL
  • 【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
  • 基于JavaWEB SpringBoot婚纱影楼摄影预约网站设计和实现
  • 【打工日常】使用docker部署IT运维管理平台CAT
  • 微信小程序开发系列(十七)·事件传参·mark-自定义数据
  • 使用插件vue-seamless-scroll 完成内容持续动态
  • leetcode热题100刷题计划
  • Dgraph 入门教程四(开发环境的搭建)
  • 力扣面试经典150 —— 6-10题
  • python异常机制
  • YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
  • 骨传导耳机怎么挑选?资深测评师一文教你搞定怎么选!
  • 外包干了8天,技术退步明显。。。。。
  • 网络编程套接字(2)——Socket套接字
  • IP传输方式——组播
  • 【React系列】如何构建React应用程序
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Apache Spark Streaming 使用实例
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • css系列之关于字体的事
  • DataBase in Android
  • Docker 笔记(2):Dockerfile
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java反射-动态类加载和重新加载
  • Java方法详解
  • Js基础知识(一) - 变量
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • maven工程打包jar以及java jar命令的classpath使用
  • mysql_config not found
  • Python 基础起步 (十) 什么叫函数?
  • Spring Boot MyBatis配置多种数据库
  • 回顾2016
  • 聚簇索引和非聚簇索引
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 数组大概知多少
  • 消息队列系列二(IOT中消息队列的应用)
  • 用简单代码看卷积组块发展
  • 1.Ext JS 建立web开发工程
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​渐进式Web应用PWA的未来
  • # include “ “ 和 # include < >两者的区别
  • #NOIP 2014# day.1 T2 联合权值
  • #stm32整理(一)flash读写
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (java)关于Thread的挂起和恢复
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (力扣题库)跳跃游戏II(c++)
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @ConditionalOnProperty注解使用说明