ngStorage 是 AngularJS 的浏览器 localStorage 和 sessionStorage 对象的包装器。
除了重新公开 get/set 方法外,它还提供了一个 $sync() 方法。但是 localStorage 和 sessionStorage 的读写已经是同步的,那么 $sync 方法是做什么的呢?
ngStorage 是 AngularJS 的浏览器 localStorage 和 sessionStorage 对象的包装器。
除了重新公开 get/set 方法外,它还提供了一个 $sync() 方法。但是 localStorage 和 sessionStorage 的读写已经是同步的,那么 $sync 方法是做什么的呢?
来自https://github.com/gsklee/ngStorage/blob/master/ngStorage.js
$sync: function () {
for (var i = 0, l = webStorage.length, k; i < l; i++) {
// #8, #10: `webStorage.key(i)` may be an empty string (or throw an exception in IE9 if `webStorage` is empty)
(k = webStorage.key(i)) && storageKeyPrefix === k.slice(0, prefixLength) && ($storage[k.slice(prefixLength)] = deserializer(webStorage.getItem(k)));
}
}
据我了解,它将数据从内部$storage
对象写入真实的浏览器webStorage
对象并用作私有函数
角度服务接受对象,但浏览器存储只接受字符串。因此,它基本上使用带有 gettor/settor 的代理对象来适当地调用 JSON.stringify() 或 JSON.parse()。
手动调用 $sync() 和 $apply() 可以进行安全检查。由于存储跨浏览器选项卡,因此存在潜在的多线程问题。在用户的更改发生与自动调用 $sync 的角度摘要之间有一个时间窗口,其中一个浏览器选项卡中的数据更改可能会消除另一个试图同时更改同一对象的选项卡的更改。
但这似乎是那些在寻找它的人中唯一发生的问题之一。