2017-06-14 1 views
0

Ich versuche, dieses Objekt in $window.localStorage() zu speichern:Saving Objektliteral zu localstorage in 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])); 
     } 
}); 

Aber ich bekomme die Werte mit den Tasten als Indizes .. ich auch versucht habe dies:

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

und mit for..in, kann aber nicht herausfinden, was der beste Weg sein würde.

Nun, wenn ich console.log(localStorage); tun habe ich dies als Ausgabe:

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

Wenn ich die 0 als Schlüssel aufzurufen, erhalte ich customer als Wert, und ich brauche 1 als Wert zu erhalten. customer sollte der Schlüssel sein.

Wie kann ich das erreichen? Wie kann ich das konvertieren?

+0

Wenn Sie 'customer' als Schlüssel zu machen, gab wären mehrere Schlüssel mit dem gleichen Namen. Und das kann nicht gemacht werden. –

+0

Ich weiß, deshalb habe ich mich an Arrays gewandt. Wie kann ich jetzt auf "Kunden" als wichtige Referenz zugreifen? – tholo

Antwort

1

Speichern Sie einfach das Objekt $scope.initData komplett zu localStorage, ich sehe keinen Vorteil, die initData Objekte separat zu speichern. Laden Sie die Kunden beim Laden der Anwendung von localStorage, und speichern Sie sie beim Aktualisieren. Aber arbeite nicht direkt von der localStorage - ich würde einen service dazu verwenden.

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

Oder Sie könnten Ihren Schlüssel zu etwas wie dies ändern (unter den Kunden eindeutige ID als Referenz), und nicht Ihre Schleifenzähler:

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

Speichern Sie also direkt das'Array von Objekten' in 'localStorage', anstatt' JSON.parse (obj) 'zu verwenden, um es in der Vorlage zu interpolieren? – tholo

+0

Ja, entweder interpolieren Sie es direkt in Ihrem 'Controller', oder verwenden Sie einen' service', um es als wiederverwendbar zu gruppieren - und laden Sie es beim Laden der Anwendung. –

+0

Ich habe keine Ahnung, warum ich nie daran gedacht habe, das ganze Objekt so zu speichern und dann zu analysieren. Nur zum Zweck des Lernens, in meinem Beispiel, gibt es eine Möglichkeit, die Schlüssel zu bekommen, wenn sie in den Werten sind 0: "{" Kunde ": 1," Vorname ":" John "," Nachname ":" Doe "}" '? Also "Kunde" als Schlüssel. – tholo

Verwandte Themen