博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue 使用History记录上一页面的数据
阅读量:7038 次
发布时间:2019-06-28

本文共 1227 字,大约阅读时间需要 4 分钟。

UI

列表页

详情页

需求

  1. 从列表页的第二页进入详情页,返回时列表页仍然显示在第二页;
  2. 从列表页的第二页进入详情页,返回时列表页的筛选条件仍然存在。

<!--more-->

技术选择

  1. 使用vue-router组件,通过this.$router.push({path: path, query: query});方式,将页码选择条件作为参数存储在url中,这种方式在上面的UI设计中是可行的,但是当列表页中包含tab组件时(分页组件是公用的),会因为push的因素(因为push会打开新页面)导致一些问题(PS:也可能是本人技术能力的原因),未实现。
  2. 使用History API(HTML5开始支持),通过history.replaceState方式,将页码作为参数存储在url中,将选择条件存储在history中(尚不清楚数据具体是存储在哪里);通过location.hash方式获取页码;通过history.state方式获取存储的选择条件。

具体实现--技术选择2

开关

为分页组件添加一个开关(openroute),因为需要灰度上线,万一有问题,要调整的页面也只有一个。代码如下:

分页组件中存储页码选择条件&获取页码

列表页面获取选择条件

目前可能是因为框架设计的问题,没法在请求数据之前通过Object.assign方式为替换初始变量,所以先这样处理(笨方法,各位大佬有解决办法麻烦指导下,谢谢):

已解决,初始变量不需要动,可以通过以下方式实现:

created(){  //获取缓存的数据  if (history.state) {    Object.assign(this.form, history.state)    if (this.form.key) {      delete this.form.key    }  }},

这里记录下:之前以为created方法是在分页组件的watch监听之后执行的,后来发现被误导了(因为之前是通过Object.assign(true, this.form, history.state)方式实现数据赋值的,但是并没有成功)。下面做个小总结:

Object.assign(true, a, b);”和“Object.assign(a, b);”有什么区别?

结论:前者:改a不影响b;后者:改a影响b

分析(这篇文章有源码分析(<font color='red'>求解答:WebStorm中如何关联源码?</font>),很棒):

FAQ

  • 需要使用history.replaceState方式是因为:它不会将更改后的url压到history栈中,所以不会增加回退和前进的操作步数;
  • 使用history.replaceState方式,可存储的state大小不能操作640k;
  • 可能存在浏览器兼容性问题,请从此处查阅:。

Demo Or Source

因为是公司项目,所以目前没有Demo或源码

参考文章

转载地址:http://ygnal.baihongyu.com/

你可能感兴趣的文章
UML类图关系全面剖析
查看>>
智能DNS安装配置过程全纪录
查看>>
Skype for Business Server 2015-03-后端服务器-2-安装-CU6
查看>>
我的友情链接
查看>>
Oracle数据文件物理删除后的恢复
查看>>
linux 数据恢复 centos 下数据恢复 ext3grep extundelete
查看>>
Fedora设置DVD为yum源
查看>>
VirtualBox虚拟机网络连接设置的四种方式
查看>>
PXE配置安装CentOS 6.5
查看>>
关于php网页内容更改但刷新不起作用的问题
查看>>
SDWebImage在xcode6.1的iOS8环境下报错
查看>>
Iptables—包过滤(网络层)防火墙
查看>>
大龄程序员,关于编程与管理的思考
查看>>
前端进阶 -js数据结构类型扩展:immutable-js(10)
查看>>
centos5.10NFS服务的配置
查看>>
有关二分查找的边界思考
查看>>
phpvirtualbox访问Ubuntu虚拟机134-配置详情
查看>>
Java 单元测试利器之 Junit
查看>>
我的友情链接
查看>>
媒体关注OSV智能桌面虚拟化平台
查看>>