表单之暂存数据:浏览器刷新/关闭后,依旧保存之前的记录

总有人以为做个表单很容易,就那么几个页面,反复做了好几天,天天以为你啥都没干,真是无语了。

页面是挺简单的,但是那么多按钮,你以为就画个样式就行了,不要做js逻辑啊,我也是脸上笑嘻嘻,心里MMP,内心一万只草泥马无处奔腾。

1. 下面说一下表单的需求说明: "暂存功能"

我的表单每页 上都有一个 暂存 的功能

  • 当用户什么都没修改 的时候,暂存按钮禁用

  • 当用户有输入的时候,暂存按钮可点击

  • 点击暂存,保存数据

1.2 暂存按钮: 用途说明
  • 当用户表单填到一半的时候,临时有事走开,点击暂存关闭浏览器下次打开浏览器的时候,依旧显示他之前填过的数据,这样用户就不用重复去填写已经填过的东西了。

2. 天真的想法?

  • 第一种尝试: 是每次点击暂存的时候,我将页面上双向绑定的值,进行一次复制angular.copy(),并保存给另一个对象object,但是每次刷新页面的时候,浏览器都会将这个controller下的所有变量初始化掉,这样保存的数据永远都是一个{}。

  • 第二种尝试: 使用angular中factory,貌似还是有点问题。

  • 这是一个想法: 每次点击暂存的时候,就调用一个Java接口,将数据保存到服务器上,然后页面刷新的时候,去掉这个接口然后取值,方法应该是可行的,介于本人Java
    也是菜的跟狗一样,就暂时不说了。

  • 第三种尝试: 使用h5新增的本地存储功能localStorage。完全可行,但是这里要注意有存也要有清,在最后一步提交的时候将数据清理掉。

  • 当然也可以试试缓存cache,这里我也不说了。

综上: 个人感觉写java接口的方法会更安全点、更好点。介于实际情况,我就先搞localStorage了。


3.下面就着重说一下localStorage的用法

3.1 什么是localStorage?捎带着sessionStorage?

localStorage又名本地存储,与之对应的是离线存储sessionStorage,他们都是h5新增的。

localStorage的显著特点是:你不主动去清除它,它就会一直保存,将存储数据存储在客户端(存储方式),即使你关闭了客户端(浏览器),它也依旧存在,属于本地持久层储存。

sessionStorage 用于本地存储一个会话(session)中的数据,如果说这个会话临时关闭了,那么数据也会消失,比如页面刷新或者关闭浏览器等等情况。

3.2 怎么将数据保存给localStorage?放值?
  • 三种写法:
// 1. obj点key写法
localStorage.keyName= 'keyVal';
// 或 2. 数组下标
localStorage["keyName"] = "keyVal" ;
// 再或者: 3.setItem(key, val)
localStorage.setItem("keyName", "keyVal");

同理,sessionStorage与它共用相同的API,所以sessionStorage的用法同上

3.3 放完值之后,总要用,怎么取?取值?
  • 与放值与之对应,三种写法:
var keyVal = localStorage.keyName;
  • 或者:
 var keyVal = localStorage[keyName];
  • 再或者
var keyVal = localStorage.getItem(keyName); 
3.4 放完、用完、怎么清理?
  • 清理某一个key的值:
localStorage.removeItem(keyName);
或
localStorage.keyName = "";
  • 清理所有的值:
localStorage.clear();

4. localStorage 要注意的另一个地方: 怎么存储对象?

其实localStorage是 只能存储字符串 的,并不能直接存储对象的。

那么如果要 存储对象一定要先把它转换成字符串

举个栗子吧:

  • 写个obj:
var myInfos = {"name":"zhouminghang",
               "sex": "male",
               "age": 23,
               "G/W":"zhengzhouUniversity/WebEngineer"}
  • 放obj:
localStorage.setItem("person", JSON.stringify(myInfos)); 
  • 取obj:
var instanceP = JSON.parse(localStorage.getItem("person"))

4.2 不知道的多用用就记住了!

  • JSON.stringify(): obj转string

stringify()用于从一个对象解析出字符串

  • JSON.pase(): string转obj

parse用于从一个字符串中解析出json对象


5. 这样做的弊端!

该种做法只适用于用户在同一台电脑上操作

如果用户在公司填一半,回家换电脑填就不行了!

换台电脑就没用了,所以说这个暂存的功能前端实现是有很大得缺陷得,归根结底还是得写接口,卧槽真是MMP得。

你可能感兴趣的:(表单之暂存数据:浏览器刷新/关闭后,依旧保存之前的记录)