利用本地Storage和会话的功能填充和友好方式 (JSON,命名间隔,扩展等).
下载 : socket2.min.js (中文(简体) ) 或者说 仓库2.js
国家预防机制数字 : npm install store2
新建数字 : Install-Package store2
文档
主存储功能可以处理 set, (中文(简体) ), get, (中文(简体) ), transact, (中文(简体) ), setAll, (中文(简体) ), getAll, (中文(简体) ), each,以及 clear
直接行动。 相形之下,这些被称为:
store(key, data); // sets stringified data under key
store(key); // gets and parses data stored under key
store(key, fn[, alt]); // run transaction function on/with data stored under key
store({key: data, key2: data2}); // sets all key/data pairs in the object
store(); // gets all stored key/data pairs as an object
store((key, data)=>{ }); // calls function for each key/data in storage, return false to exit
store(false); // clears all items from storage
[brackets]中的参数是可选的. 还有更明确和多功能的职能:
store.set(key, data[, overwrite]); // === store(key, data);
store.setAll(data[, overwrite]); // === store({key: data, key2: data});
store.get(key[, alt]); // === store(key);
store.getAll([fillObj]); // === store();
store.transact(key, fn[, alt]); // === store(key, fn[, alt]);
store.clear(); // === store(false);
store.has(key); // returns true or false
store.remove(key[, alt]); // removes key and its data, then returns the data or alt, if none
store.each(fn[, fill]); // === store(fn); optional call arg will be 3rd fn arg (e.g. for gathering values)
store.add(key, data[, replacer]); // concats, merges, or adds new value into existing one
store.keys([fillList]); // returns array of keys
store.size(); // number of keys, not length of data
store.clearAll(); // clears *ALL* areas (but still namespace sensitive)
传入 false 对于可选覆盖参数,将导致 set 要跳过的行动
如果存储器已经有该密钥的值 。 全体 set 动作方法返回上一个值
对于那个键,默认。 如果覆盖为 false 并有一个之前的值,未使用的新
将返回值.
传入的职能 transact 将获得该密钥的当前值作为参数或
如果没有的话,可交替办理。 当传递函数完成后, 切换会保存返回的值
在指定的密钥下。 如果函数返回 undefined,将保存原始值.
这使得交易功能易于以持续的方式改变内部属性:
store.transact(key, function(obj) {
obj.changed = 'newValue';// this change will be persisted
});
传入的职能 each 将接收键作为第一个参数,当前值作为第二个参数;如果 fill 参数被指定,它的值将是每次呼叫的第三个参数(wew ever)
需要一个 fill 参数). 如果函数返回 false 在重复期间的任何时候
循环将提前退出,而不继续到下一个密钥/值对.
store.each(function(key, value) {
console.log(key, '->', value);
if (key === 'stopLoop') {
return false;// this will cause each to stop calling this function
}
});
所有要选择的检索功能 alt 参数也可以使用该参数来指定"复活"功能. 作为参数,这些键和值(是的,也是被嵌入的)都得到,并允许您提供解析此字符串的替代方法。 这对丰富的物体特别有用 Date 类型。 见 MDN的JSON.parse文档 更多信息和实例。 作为替代,您可以设置一个全局复活器到 store._.revive 属性来处理全部 get, (中文(简体) ), getAll, (中文(简体) ), remove,以及 transact 打电话.
同样,设置函数需要选择 overwrite 参数也可以使用该参数接受一个"重置器"函数,该函数接收每个键和值(是,也被嵌入了)作为参数,并允许您提供其他的字符串方法. 这对丰富的物体特别有用 Map 或者说 Set。见 MDN 的 JSON. 字符串文件 更多信息和实例。 作为替代,您可以设置一个全局替换器到 store._.replace 属性来处理全部 set, (中文(简体) ), setAll, (中文(简体) ), add,以及 transact 打电话.
对于 getAll 财务报告和审定财务报表 keys,可以选择在对象或列表中分别通过,
您想要添加结果。 这不是一个空列表 .
你可能需要或想要这个的特殊情况,
一般来说,大多数用户应该忽略这些可选参数.
两者都使用第二个可选的参数 each 函数,
这也是一个特色。 这个 value 参数作为
调用函数的第二个参数(取代与当前键相关的数据)
并在结尾返回。 同样,大多数用户不应需要这一功能.
所有这些都使用了浏览器的本地Storage(aka"local"). 使用会话Storage仅需要
调用相同的函数 store.session数字 :
store.session("addMeTo", "sessionStorage");
store.local({lots: 'of', data: 'altogether'});// store.local === store :)
也有一个商店API自动用于保存非持久性信息, 意思是只持续到页面重新装入 .
store.page("until","reload");
所有细节 get, (中文(简体) ), set可在 store.session, (中文(简体) ), store.local,以及 store.page,以及经由 store.area(name, customStorageObject) 通过扩展,其中自定义Storage对象必须执行 存储接口。这就是如何 商店. old.js (中文(简体) ) 扩展 store.js支持更古老的IE和Firefox版本.
如果您想将不同页面或区域 f 中存储的数据放入单独的命名空间,
页:1 store.namespace(ns) 函数是您的朋友 :
var cart = store.namespace('cart');
cart('total', 23.25);// stores in localStorage as 'cart.total'
console.log(store('cart.total') == cart('total'));// logs true
console.log(store.cart.getAll());// logs {total: 23.25}
cart.session('group', 'toys');// stores in sessionStorage as 'cart.group'
命名空间提供与 store 但按需要默默地添加/删除命名空间前缀.
它还使命名空间的API直接通过 store[namespace] (例如:. store.cart只要这样
不与商店 API 中已有的部分相冲突.
“ namespace” 函数是三个“ extra” 函数之一, 这些函数也是“ store API” 的一部分 :
store.namespace(prefix);// returns a new store API that prefixes all key-based functions
store.isFake([force]);// test or set whether localStorage/sessionStorage or an in-memory, 'fake' storage is used
store.namespace 也可以使用额外的参数来创建在被调用存储区域中的命名空间,以及
用于高级使用大小写(例如:. store.page.namespace("subpage", true, ":")) (中文(简体) ).
如果本地Storage或SessionStorage不可用,它们会被伪造以防止出错, 但是,所储存的数据不会持续到当前文件/页的寿命后。 使用 商店. old.js (中文(简体) ) 扩展以添加对古代浏览器中存储 API 的持续支持.
isFake(true|false) 在试验情况下强迫使用临时、假储存特别有用,
防止挤出实际存储.
扩展
这些大多可以使用进一步的文件 和滥用... er... 欢迎捐款! 特别是,任何ES6用户都有兴趣制作这些软件 可导入ES6 将不胜感激.
Beta - 稳定且绝对有用
- 商店. old.js (中文(简体) ) - 为古代浏览器添加工作本地Storage和会话Storage多填充
- 存储. overflow.js - 回到假存储 配额错误
- 存储.cache.js - 使数据过期,通过几秒钟,以覆盖(第三段)
set()电话 - (原始内容存档于2018-09-21). socket.on.js - 高级存储事件处理(每个密钥,每个命名空间等在IE9+)
- (原始内容存档于2018-03-25). socket.array.js - 对任何和所有数据(如:.
store.push(key, v1, v2)) (中文(简体) ). - 存储. dom.js - 申报性、持久性的DOM元素通过商店含量.
- cookie.js (中文(简体) ) - 支持饼干作为存储区域:
store.cookie('num',1)以方便后端共享.
阿尔法 - 或不完整或不稳定,或两者兼有
- (原始内容存档于2018-10-21). socket.quota.js - 登记回调处理(甚至取消)配额错误
- 措施 - 测量所用和可用空间的实验扩展(需要工作)
- 商店。 - 当只有假存储器可用时,沉默地失败而不是假装.
- 存储.dot.js - 为密钥创建存取器(例如:.
store.foo == store.get('foo')(中文(简体) ) - 商店. dep.js - 允许从存储对象(例如:.
store.get('key.property')(中文(简体) ) - (原始内容存档于2017-09-28). socket.async.js - 添加内容
store.async复制到每个存储和命名空间,这些存储和命名空间同步执行函数,并返回一个完成后解决的许诺. - cookies.js (中文(简体) ) - 支持用商店API(如:.
store.cookies.get('user')(中文(简体) )
写入您的扩展名
要写入自己的扩展名,您可以使用或小心地覆盖已曝光的内部函数,作为 store._。 。 。 .
特别是 store._.fn(fnName, fn) 自动添加您新函数的方法
每一个实例 store 接口(例如). store, (中文(简体) ), store.session
以及所有现有和未来的名称空间)。 注意使用它,因为它将超越现有方法.
以下是一个简单的例子:
(function(_) {
_.fn('falsy', function(key) {
return !this.get(key);
});
_.fn('truthy', function(key) {
return !this.falsy(key);
});
})(store._);
此扩展将像这样使用 :
store('foo', 1);
store.falsy('foo'); // returns false
store.session('bar', 'one');
store.session.truthy('bar'); // return true;
const widgetStore = store.namespace('widget');
widgetStore.falsy('state'); // returns true
释放历史
- 2010-02-10 v0.1 (摘自esha.js) (中文(简体) )
- 2010-05-25 v1.0 (内部发布)
- 2013-04-09 (中文(简体) ) 页:1 (公开) - 第一次 GitHub 发布
- 2013-04-20 (中文(简体) ) 页:1 (公有) - 放弃有缺陷/混淆/未使用密钥(一)方法,修复扩展问题.
- 2013-04-30 (中文(简体) ) 页:1 (public) - 浏览(和朋友)支持(模块.exports=商店)
- 2013-05-30 (英语) 页:1 (公共) - 构成部分支助(旧构成部分.json现在是bower.json)
- 2014-03-10 (中文(简体) ) 页:1 (公开) -- -- AMD支助和构成部分改进
- 2015-02-02 (中文(简体) ) 页:1 (公用) - 更改商店.cache.js 使用秒,而不是分钟.
- 2015-05-05 (英语) 页:1 (公有) - 节点相容性
- 2015-05-08 (中文(简体) ) 编号: (公有) - 总是暴露全球,允许扩展永远有效.
- 2015-05-22 (中文(简体) ) 页:1 (公开) - 使用假存储 Safari 私有模式(而不是让配额例外取消)
- 2015-10-27 (英语) 页:1 (公开) - 添加源地图
- 2017-01-04 (中文(简体) ) 页:1 (公有) - 添加 store. transact(键, fn [, alt])
- 2017-01-09 (中文(简体) ) 页:1 (公开) - 第34期更新;新的扩展(阵列、点和深层);仅在非AMD/CommonJS环境中曝光全球(PR #35)
- 2017-08-09 (中文(简体) ) 页:1 (公开) - 修复
clear()(tx至Martin Kluska) 假存储 - 2018-01-18 (英语) 页:1 (公开) - 添加
index.d.ts在根中提供类型脚本支持 - 2018-01-23 (英语) 页:1 (公开) - 支助
each(fn,value), (中文(简体) ),getAll(fillObj),以及keys(fillList)* 支持一些高级/小型案件 - 2018-11-15 (英语) 页:1 (公开) - 添加
add(key, data)用于保存现有和新数据的常见情况。 解决60号问题. - 2019-07-23 (中文(简体) ) v 2.8.0 (韩语) (公开) - 添加
store(fn)快捷键store.each,在继承时复制属性,并制作store.each(fn, fill)总是以 3rd arg 发送填充,而不是替换值 . - 2019-08-21 (中文(简体) ) 页:1 (public) - 添加 store.remove(密钥, alt)来匹配 store.get(密钥, alt)的行为(问题#68)
- 2019-09-27 (中文(简体) ) v2.10.0 (中文(简体) ) (公开) - 添加
store.page以提供页面范围存储,补充本地和会话范围存储。 (问题69) - 2020-03-23 [v2.11.0] (公开) - 添加
store.get(key, reviveFn)和 QQstore. .revive 支持对丰富类型进行剖析(例如日期) - 2020-04-14 (中文(简体) ) 页:1 (公有) - 修复虚假的替代值支持
store.get(key, alt) - 2020-05-11 (中文(简体) ) v2.11.2 (中文(简体) ) (公有) - 修复缺失的TS声明新页面范围存储.
- 2020-08-12 (中文(简体) ) 页:1 (公有) - PR用于更好的存储打字,更好的测试Key,和dev依赖性更新.
- 2021-12-16 (英语) v2.13.1 (中文(简体) ) (公开) - 添加
store.set(key, value, replacerFn), (中文(简体) ),store._replace,以及isFake([force])用于支持字符串化丰富的类型和更容易的测试。 而基于 cookie 的扩展,用于使用由单一"存储" cookie 支持的商店或存储 API 用于所有 cookie. - 2022-03-14 (英语) 页:1 (公开) - 恢复缺失的 TS 存储声明. area (id [, area])
- 2022-05-11 (英语) 页:1 (public) - 允许通过 store. .nsdelim 更改命名空间分隔器
- 2022-07-14 (英语) 页:1 (公开) - 更改为
set并允许将命名空间分隔符传递给namespace(name, thisAreaOnly, delim)用于单个命名空间,以避免冲突. - 2022-07-18 (英语) v 2.14.2 (公用) - 校对:Soup
index.d.ts打字声. - 2024-02-14 (英语) 页:1 (公开) - 剪切许可证选项仅麻省理工学院, 也取消了鲍尔和组件支持,因为这些已经很久了.