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-table
      v-loading="listLoading"
      :data="list"
      element-loading-text="Loading"
      border
      fit
      highlight-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 = true
      let queryParams = this.queryParams
      getList(queryParams).then(response => {
        this.list = response.data.items
        this.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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何获取国外信用卡?需要国外银行卡支付怎么解决?如何订阅国外产品?

当国内的用户想要使用国外的产品时&#xff0c;很多产品是需要订阅付费的。其中有些产品还没有引入国内&#xff0c;只能用国外的信用卡支付&#xff0c;对于在国内的朋友&#xff0c;如何获取一张国外的信用卡呢&#xff1f; 这里推荐一个平台&#xff1a;wildCard waildCard…

基于SpringBoot的在线拍卖系统

目录 1、 前言介绍 2、主要技术 3、系统流程和逻辑 4、系统结构设计 5、数据库设计表 6、运行截图(部分) 6.1管理员功能模块 6.2用户功能模块 6.3前台首页功能模块 7、源码获取 基于SpringBoot的在线拍卖系统录像 1、 前言介绍 随着社会的发展&#xff0c;社会的各行…

力扣大厂热门面试算法题 6-8

6. Z 字形变换&#xff0c;7. 整数反转&#xff0c;8. 字符串转换整数 (atoi)&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.08 可通过leetcode所有测试用例。 目录 6. Z 字形变换 解题思路 边界条件 完整代码 Python Ja…

【手游联运平台搭建】游戏平台的作用

随着科技的不断发展&#xff0c;游戏行业也在不断壮大&#xff0c;而游戏平台作为连接玩家与游戏的桥梁&#xff0c;发挥着越来越重要的作用。游戏平台不仅为玩家提供了便捷的游戏体验&#xff0c;还为游戏开发者提供了广阔的市场和推广渠道。本文将从多个方面探讨游戏平台的作…

AWTK-MVVM 文件模型

AWTK-MVVM 文件模型 名称&#xff1a;file 功能&#xff1a;用于读写文件内容&#xff0c;浏览&#xff08;打开/保存&#xff09;文件。 内置属性 属性类型说明filenamestring文件名contentstring文件内容sizenumber文件大小auto_loadboolean是否自动加载文件内容is_dirtyb…

QT:用opencv的KNN识别图片中的LED数字(一)

前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设…

关于阿里云服务器地域的选择方法,看这一篇就够了

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

亚洲股市下一步的关键:中国看财报、日本看汇率、韩国看治理、印度看基建

汇丰认为财报将是驱动中国股市走势的关键因素。目前市场预计2024年中国企业每股收益将增长16%。 日本央行转向、A股业绩复苏、印度基建、韩国市场改革......最近这段时间&#xff0c;亚洲各大市场涌现出了不同的交易主题。 汇丰银行指出&#xff0c;中国受到本土企业盈利能力…

直播美颜SDK开发:如何应对不同场景下的挑战?

直播美颜SDK的开发&#xff0c;便是为了满足这一需求&#xff0c;但面对不同场景下的挑战&#xff0c;开发者们需要克服各种技术难题&#xff0c;以确保美颜效果的稳定和自然。 首先&#xff0c;我们需要了解直播美颜SDK在不同场景下可能面临的挑战。这些挑战主要包括&#xff…

牛客论坛笔记~

文章目录 Redisspring整合redis实现点赞帖子的赞用户的赞 关注功能热帖排行redis存储验证码、登录凭证、用户信息 kafka阻塞队列kafka![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d35be55986344b548710985cd8ecbd87.png)触发事件处理事件 Redis高级网站数据统计…

【SSCI稀缺版面】最快录用仅2个月(内附录用发表时间节点)

录用案例 JCR4区经济管理类SSCI (进展顺) 【期刊简介】IF&#xff1a;0-1.0&#xff0c;JCR4区&#xff0c;中科院4区&#xff1b; 【检索情况】SSCI在检&#xff1b; 【征稿领域】计算机/数据建模在经济与管理决策绩效评价的形态应用相关研究均可&#xff1b; 【案例分享】…

​项目文章 | METTL3敲减通过m6A-YTHDC2介导的AMIGO2调控抑制RA-FLS活化

类风湿性关节炎&#xff08;RA&#xff09;是一种自身免疫性关节疾病&#xff0c;其特征是慢性关节滑膜炎、滑膜增生过度和关节损伤。近年来&#xff0c;N6-甲基腺苷&#xff08;m6A&#xff09;修饰的RNA在癌症和自身免疫疾病&#xff08;包括RA&#xff09;中的调控作用受到广…

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

前言 师弟&#xff1a;“师兄&#xff0c;我又被鄙视了。说我的系统太差&#xff0c;测试不过关。” 我&#xff1a;“怎么说&#xff1f;” 师弟&#xff1a;“每次发布版本给程夏&#xff0c;都被她发现一些bug&#xff0c;太丢人了。师兄&#xff0c;有什么方法来衡量测试的…

VR数字化线上展馆降低企业投入成本和周期

VR云展会是一种全新的展览形式&#xff0c;它利用虚拟现实技术&#xff0c;将实体展览搬到线上&#xff0c;让观众可以在家中就能参观各种展览。这种新型的展览方式有许多亮点&#xff0c;下面就来详细介绍一下。 首先&#xff0c;VR云展会打破了地域限制。传统的实体展览通常只…

Python科学计算之生成数据

文章目录 生成序列创建网格创建特殊数组随机数组 Python科学计算系列&#xff1a;数组 正所谓巧妇难为无米之炊&#xff0c;没有数据&#xff0c;也就没法对数据进行分析&#xff0c;从而数值计算也就成了无根之木了。所以&#xff0c;在学习具体的数值计算方法之前&#xff0…

【算法 高级数据结构】树状数组:一种高效的数据结构(一)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;算法题、 基础算法~赶紧来学算法吧 &#x1f4a1;往期推荐&#xff1a; 【算法基础 & 数学】快速幂求逆元&#xff08;逆元、扩展欧几里得定理、小费马定理&#x…

【详识C语言】自定义类型之一:结构体

本文重点 结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段&#xff08;位段的填充&可移植性&#xff09; 结构体 结构体的声明 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个…

21、状态模式(行为性模式)

版本一、get状态指针 #include <iostream> using namespace std;//前置声明 class Context;//状态 class State{ public://4个状态virtual void toUp (Context& context){ }virtual void toDown (Context& context){ }virtual void toLeft (Context& cont…

Linux报错排查-刚安装好的ubuntu系统无法ssh连接

Linux运维工具-ywtool 目录 一.问题描述二.问题解决2.1 先给ubuntu系统配置阿里云源2.2 安装openssh-server软件2.3 在尝试ssh连接,可以连接成功了 三.其他命令 一.问题描述 系统:ubuntu-18.04-desktop-amd64 系统安装完后,想要通过xshell软件连接系统,发现能Ping通系统的IP,但…

视频水印怎么轻松去除?这三款神器让您直呼过瘾!

在现代社会&#xff0c;视频内容日益丰富多样&#xff0c;但有时我们更希望获得视频中的文字文稿&#xff0c;以便于搜索、编辑或传播。下面我将为您介绍三款优秀的视频转文字工具&#xff0c;它们能够帮助您快速、准确地将视频内容转换为可编辑的文字格式。让我们一起来看看这…