在本地存储中持久化的角度工厂对象

Angular Factory Object Persisting Over Storing in Local Storage

本文关键字:工厂 对象 持久化 存储      更新时间:2023-09-26

我有一个问题,我需要在 Angular 1.4.0 中提供帮助。我有一个角度工厂,里面有一个复杂的结构和方法,所以我能够通过调用该方法将工厂恢复到原始状态。工厂看起来像这样。

 angular.module('myApp').factory('itemFcty', function(){
 var currentValues = {};
 var default values {
       a = 1,
       b = 2,
       resetData : function(){
          currentValues = angular.extend(currentValues, defaultValues);
          return currentValues 
       };
   };
   defaultValues.resetData();
   return currentValues;

});为了向"a"添加值,我调用itemFcty.a = 2;因此,当我想在需要时覆盖所有值时,此方法效果很好。但是,有人问我是否可以在刷新时保留数据。所以我将对象字符串化为 JSON。喜欢这个:

localStorage.setItem('itemFcty', JSON.parse(itemFcty);

然而,我遇到了一个障碍。要存储在本地存储中的唯一数据是

{a = 1,b = 2,}

我可以通过这样做重新添加该方法:-

itemFcty.resetData = function(){return currentValues = angular.extend(currentValues, defaultValues);}

这是一个问题,现在工厂的功能确实与以前相同,因为我无法调用函数作为调用并在默认值对象之外返回,我无法在我的生命中弄清楚如何将其添加回,因为一切都直接进入整个对象。

您的帮助将不胜感激!

/*************************编辑*****************************/好的,所以我认为我没有很好地解释这一点。我的工厂看起来和上面一模一样。用户点击刷新。工厂存储在本地存储中。我从本地存储中取回它。但问题来了。在本地存储之前看起来像这样

angular.module('myApp').factory('itemFcty', function(){
 var currentValues = {};
 var defaultValues = {
       a : 1, 
       b : 2, 
       resetData : function(){
          angular.extend(currentValues, defaultValues); 
          // you don't have to return the values
       } // <------you can't use ; in the object properties
   };
   defaultValues.resetData();
   return currentValues;
});

现在,当我将数据从本地存储中取出并进入工厂时,工厂看起来像这样。

angular.module('myApp').factory('itemFcty', function(){
     a : 1, 
     b : 2, 
});
我可以重新添加重置数据功能,

但是由于工厂不包含当前值或默认值,因此重置数据功能将不起作用。所以基本上我问的是,在我从本地存储重新加载数据后,如何使我的工厂看起来与最初相同。

您是否从 localStorage 加载了变量?另外,还有一个错字,我会说var default values.通常,字符串化不考虑方法,因为这对于导入它们的其他语言没有意义。

问题:

  1. var default values {,空格分隔变量和缺少赋值运算符=
  2. 在对象中,你可以用=:赋值,所以会产生错误{ a = 1, b = 2 }

您可以做的是:

angular.module('myApp').factory('itemFcty', function(){
 var currentValues = {};
 var defaultValues = {  // <-------should have to be declared like this
       a : 1, // =  should be replaced with :
       b : 2, //  and here too.
       resetData : function(){
          angular.extend(currentValues, defaultValues); 
          // you don't have to return the values
       } // <------you can't use ; in the object properties
   };
   defaultValues.resetData();
   return currentValues;
});