总有人以为做个表单很容易,就那么几个页面,反复做了好几天,天天以为你啥都没干,真是无语了。
页面是挺简单的,但是那么多按钮,你以为就画个样式就行了,不要做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得。