2017-06-14 81 views
0

我想这个对象保存到$window.localStorage()保存对象文本的localStorage在AngularJS

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应该是关键。

我该如何做到这一点?我该如何转换?

+0

如果您'customer'作为重点,有将是多个具有相同名称的密钥。这是不能做到的。 –

+0

我知道,这就是为什么我转向数组。我现在怎样才能访问'customer'作为关键参考? – tholo

回答

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])); 
     } 
}); 
+0

因此,直接将'array of objects'保存到'localStorage'中,而不是使用'JSON.parse(obj)'将它插入到模板中? – tholo

+0

是的,无论是直接在你的'controller'中插入它,还是使用'service'将它分组为可重用 - 并在应用程序加载时加载它。 –

+0

我不知道为什么我从来没有想过保存这样的整个对象,然后解析它..只是为了学习的目的,在我的例子中,是否有一种方法来获得如果他们在值中的键, 0:“{”customer“:1,”firstName“:”John“,”lastName“:”Doe“}”'?因此获得''客户''作为关键。 – tholo