角色工厂对象在本地存储中存储不断

时间:2016-01-29 07:56:16

标签: javascript angularjs json web

我在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, 
});

我可以重新添加重置数据功能,但由于出厂时不包含当前值或默认值,重置数据功能将不起作用。 所以基本上我问的是如何制作我的工厂,看起来和我从本地存储重新加载数据后的情况一样。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

问题:

  1. var default values {,空格分隔变量和缺少赋值运算符=
  2. 在对象中,您可以使用=:分配值,因此会产生错误{ a = 1, b = 2 }
  3. 你能做的是:

    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;
    });