vk.localStorage.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /**
  2. * vk依赖扩展 - localStorage 本地缓存
  3. * pub - 公共的可随时删除的缓存
  4. * kh - 跟登录账号有关联的缓存
  5. * sys - 系统级缓存 - 一般不删除
  6. *
  7. * 储存缓存
  8. * vk.setStorageSync(key,data);
  9. * 获取缓存
  10. * vk.getStorageSync(key);
  11. */
  12. var localStorage = {};
  13. /**
  14. * 将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。
  15. * @param {String} key 本地缓存中的指定的 key
  16. * @param {Any} data 需要存储的内容,只支持原生类型、及能够通过 JSON.stringify 序列化的对象
  17. */
  18. localStorage.setStorageSync = function(key,data){
  19. uni.setStorageSync(key, data);
  20. watchLocalStorage({ type:"set", key, data });
  21. };
  22. /**
  23. * 从本地缓存中异步获取指定 key 对应的内容。
  24. * @param {String} key 本地缓存中的指定的 key
  25. */
  26. localStorage.getStorageSync = function(key){
  27. let data = uni.getStorageSync(key);
  28. // get 没有必要监听
  29. // watchLocalStorage({ type:"get", key, data });
  30. return data;
  31. };
  32. /**
  33. * 同步获取当前 storage 的相关信息。
  34. */
  35. localStorage.getStorageInfoSync = function(){
  36. let info = uni.getStorageInfoSync();
  37. let sizeInfo = calcSize(Number(info.currentSize), 1024, 3,["KB","MB","GB"]);
  38. info.sizeInfo = sizeInfo;
  39. return info;
  40. };
  41. /**
  42. * 从本地缓存中同步移除指定 key。
  43. * @param {String} key 本地缓存中的指定的 key
  44. */
  45. localStorage.removeStorageSync = function(key){
  46. uni.removeStorageSync(key);
  47. watchLocalStorage({ type:"remove", key });
  48. };
  49. /**
  50. * 从本地缓存中异步移除指定 key。
  51. */
  52. localStorage.removeStorage = function(obj){
  53. uni.removeStorage({
  54. key:obj.key,
  55. success:function(res){
  56. watchLocalStorage({ type:"remove", key:obj.key });
  57. if(obj.success) obj.success(res);
  58. },
  59. fail:obj.fail,
  60. complete:obj.complete
  61. });
  62. };
  63. /**
  64. * 同步清理本地数据缓存。若key有值,则清除键值为指定字符串开头的缓存
  65. * @param {String} key 本地缓存中的指定的 key
  66. * vk.clearStorageSync();
  67. */
  68. localStorage.clearStorageSync = function(key){
  69. if(key){
  70. let { keys } = uni.getStorageInfoSync();
  71. if(keys){
  72. keys.map((keyName) => {
  73. if(keyName.indexOf(key) == 0){
  74. localStorage.removeStorage({
  75. key: keyName
  76. });
  77. }
  78. });
  79. }
  80. }else{
  81. watchLocalStorage({ type:"clear" });
  82. uni.clearStorage();
  83. }
  84. };
  85. export default localStorage;
  86. /**
  87. * 单位进制换算
  88. * length 换算前大小
  89. * ary 进制,如KB-MB-GB,进制1024
  90. * precision 数值精度
  91. * arr 进制的数组,如["B","KB","MB","GB"]
  92. * calcSize(length,1024,3,["B","KB","MB","GB"]);
  93. */
  94. function calcSize (length=0,ary,precision,arr){
  95. var size = parseFloat(length);
  96. var mySize = 0;
  97. var type = "";
  98. if(size<ary || arr.length<=1){
  99. type = arr[0];
  100. mySize = parseFloat(size.toFixed(precision));
  101. }else{
  102. for (var i = 1; i < arr.length; i++) {
  103. var g = arr[i];
  104. size = size/ary;
  105. if(size <ary){
  106. type = g;
  107. mySize = parseFloat(size.toFixed(precision));
  108. break;
  109. }
  110. }
  111. }
  112. return {
  113. size : mySize,
  114. type : type,
  115. title : mySize + " " + type
  116. }
  117. };
  118. function watchLocalStorage(obj){
  119. if(typeof localStorage.watch === "function"){
  120. localStorage.watch(obj);
  121. }
  122. }