vue 详情页返回列表,过滤查询条件保留

打印 上一主题 下一主题

主题 567|帖子 567|积分 1701

项目场景:

在列表页进行的条件查询出来的数据,点击查看详情之后,再返回,之前的查询条件会清空,如何不清空?


思路

在点击查看的时候,保留查询的条件,等返回的时候,把条件给查询框中的值。这个地方多出用到,所有需要采用vuex,这样更方便。。。每个页面在离开之前,保留查询条件在vuex中,从详情页回来的时候,再把查询条件给赋值到input中
vuex中的写法:这个项目中的vuex是一个modules,在modules中新建文件。

引入到index中注册全局的store

列表中这样写:
1.点击查询的时候,设置isFilters为ture,
2.根据查询的条件,点击查看的时候,触发vuex的存储事件,存查询的参数到vuex。
3.从详情返回列表的时候,把vuex中的参数给赋值到列表上的查询条件框中。
4.在列表页上,加上一个混入的方法。
5.点击重置的时候,清空vuex中的值。


混入的代码如下:(单独的文件)
  1. // 用来判断是否是从详细页过来的路径
  2. const filterParamsMixin = {
  3.   beforeRouteEnter(to, from, next) {
  4.     //在路由加载进入之间,如果不是从当前详情页返回进入列表页的话,则将缓存中的pageNum和pageSize清除
  5.     const toFullPath = to.fullPath
  6.       .split('/')
  7.       .filter((v, i) => i < 3)
  8.       .join('')
  9.     const fromFullPath = from.fullPath
  10.       .split('/')
  11.       .filter((v, i) => i < 3)
  12.       .join('')
  13.     console.log(toFullPath)
  14.     console.log(fromFullPath)
  15.     if (toFullPath !== fromFullPath) {
  16.       // sessionStorage.pageNum = ''
  17.       // sessionStorage.pageSize = ''
  18.       store.dispatch('setChangeFilter', {})
  19.     }
  20.     next()
  21.   },
  22. }
复制代码
列表页代码:
  1.   // 当路由离开列表页之前
  2.   beforeRouteLeave(to, from, next) {
  3.     // 当to的路由为详情页面时且isFilters为true(列表页面进行了筛选)时触发
  4.     if ((to.name === 'inputDetail' || to.name === 'input') && this.isFilters) {
  5.       // 将筛选项赋值给changeFilter
  6.       this.$store.dispatch('setChangeFilter', this.form)
  7.     }
  8.     next()
  9.   },
  10.   // 当路由进入列表页之前
  11.   beforeRouteEnter(to, from, next) {
  12.     //当from的路由为详情页面时触发
  13.     if (from.name === 'inputDetail' || from.name === 'input') {
  14.       next((vm) => {
  15.         if (vm.$store._modules.root.state.filterParams.changeFilter !== {}) {
  16.           // 把changeFilter值赋给当前筛选项的对象
  17.           // vm.form = vm.$store.state.changeFilter
  18.           vm.form = vm.$store._modules.root.state.filterParams.changeFilter
  19.           // created会在next之前执行。所以获取到筛选数据,可以在这里进行数据的初始化操作
  20.           vm.initData()
  21.         }
  22.       })
  23.     } else {
  24.       // 如果不是从详情页来的,就直接初始化
  25.       next((vm) => {
  26.         vm.initData()
  27.       })
  28.     }
  29.     // beforeRouteEnter中不能直接获得this,需要 next ((vm) =>{ vm.$stroe.state.changeFilter })这样获取,
  30.     // 而且next里的方法要在create之后执行
  31.   },
复制代码
点击重置,清空vuex中的过滤条件

注意点:

这个地方要注意的点:
1.vuex中的changeFilter的值,我的项目中隐藏的很深。不太好找,需要在调试的时候细心查找。
2. created会在next()之前执行。所以要想获取到筛选数据,必须得在这里进行数据的初始化操作。不然在created中初始化,此时的查询条件的筛选数据还没获取到。
原来的代码中,详情页面还是要写一下。

但是太麻烦了,于是同事提供了mixins的方式,就方便了很多。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表