2017-08-16 90 views
0

ngStorage是浏览器的AngularJS的localStorage和sessionStorage对象的包装。

除了重新公开get/set方法之外,它还提供了一个$ sync()方法。但是localStorage和sessionStorage读取的内容是&写入已经是同步的,那么$ sync方法是做什么的?

回答

0

角服务接受对象,但浏览器存储只接受字符串。所以它基本上使用gettor/settor代理对象来调用JSON.stringify()或JSON.parse()。

手动调用$ sync()和$ apply()可以进行安全检查。由于存储跨浏览器选项卡,因此存在潜在的多线程问题。在用户发生变化和角度摘要之间存在一段时间间隔,该角度摘要自动调用$ sync,其中来自一个浏览器选项卡的数据更改可以消除来自试图同时更改同一对象的另一选项卡的更改。

但它似乎是那些只发生在QA-谁是寻找它的种类问题之一。

0

因为它在documentation

更改将$存储,$本地存储,以及之间的localStorage $范围自动同步时间据说 - 甚至可以跨不同的浏览器标签!

由于可以看到here,显式$ sync调用更新$ storage以与本地/会话存储同步,如果它不是由于某种原因。通常不应该手动调用它,这就是为什么它没有记录。

0

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对象并用作私有函数