【问题标题】:Saving Object Literal to localStorage in AngularJS在AngularJS中将对象文字保存到localStorage
【发布时间】:2017-11-16 08:02:47
【问题描述】:

我正在尝试将此对象保存到$window.localStorage()

ctrl:

app.controller('ctrl', function($window, $scope) {

$scope.initData = [
        {
            customer: 1,
            firstName: "John",
            lastName: "Doe"
        },
        {
            customer: 2,
            firstName: "Jane",
            lastName: "Doe"
        },
        {
            customerId: 3,
            firstName: "John",
            lastName: "Smith",

        }
      ];

// scopes

for(var i = 0; i < $scope.initData.length; ++i) {
           $window.localStorage.setItem(i, JSON.stringify($scope.initData[i]));
        }
});

但是我用键作为索引的值..我也试过这个:

for(var i = 0; i < $scope.initData.length; ++i) {
           $window.localStorage.setItem(i, Object.values($scope.initData[i]));
        }

for..in,但不知道什么是最好的方法。

现在,当我执行console.log(localStorage); 时,我将其作为输出:

0:"{"customer":1,"firstName":"John","lastName":"Doe"}"
1:"{"customer":2,"firstName":"Jane","lastName":"Doe"}"
2:"{"customer":3,"firstName":"John","lastName":"Smith"}"

当我访问0 作为键时,我得到customer 作为值,我需要得到1 作为值。 customer 应该是关键。

我怎样才能做到这一点?如何转换?

【问题讨论】:

  • 如果你把customer作为一个键,就会有多个同名的键。而这是做不到的。
  • 我知道,这就是我转向数组的原因。我现在如何访问customer 作为关键参考?

标签: javascript jquery html angularjs local-storage


【解决方案1】:

只需将对象$scope.initData 完全保存到localStorage,我看不到单独保存initData 对象的优势。在应用程序加载时从localStorage 加载客户,并在更新时保存它们。但是不要直接使用localStorage——我会在此基础上使用service

// Set localStorage item
localStorage.setItem('initData', JSON.stringify(dataObject));

// Retrieve the object from localStorage
var retrievedObject = localStorage.getItem('initData');

// console.log retrieved item
console.log('retrieved data Object: ', JSON.parse(retrievedObject));

或者您可以将您的密钥更改为这样的东西(以客户唯一 ID 作为参考),而不是您的循环计数器:

for(var i = 0; i < $scope.initData.length; ++i) {
           $window.localStorage.setItem('customer-id' + $scope.initData[i].customer, JSON.stringify($scope.initData[i]));
        }
});

【讨论】:

  • 那么,直接将array of objects保存到localStorage中,而不是使用JSON.parse(obj)在模板中插值?
  • 是的,您可以直接将其插入到您的 controller 中,或者使用 service 将其分组为可重用 - 并在应用程序加载时加载它。
  • 我不知道为什么我从来没有想过像这样保存整个对象然后解析它。只是为了学习,在我的例子中,有没有办法获取密钥,如果他们在值中,例如 0:"{"customer":1,"firstName":"John","lastName":"Doe"}" ?所以将"customer" 作为键。
  • 我想保存整个对象 - 会更好是:) 您必须提供自定义过滤器来查找具有特定 id 的元素(循环所有元素并匹配 customer 字段到您正在寻找的值 - 并返回该项目)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多