2017-09-28 3 views
0

Hallo in irgendeiner Funktion Ich habe Code bekam das Objekt {} zu localForage speichern, die nichts anderes als asynchrone localstorage istShop Objekte im lokalen Speicher

if(vm.convertedColors[vm.convertedColors.length - 1].colorInRGB && 
    vm.convertedColors[vm.convertedColors.length - 1].colorInHSL && 
    vm.convertedColors[vm.convertedColors.length - 1].colorInHEX) { 
     $localForage.setItem('colors', { 
      inHSL: vm.convertedColors[vm.convertedColors.length - 1].colorInHSL, 
      inHEX: vm.convertedColors[vm.convertedColors.length - 1].colorInHEX, 
      inRGB: vm.convertedColors[vm.convertedColors.length - 1].colorInRGB 
     }).then(function() { 
      $rootScope.$emit('localForageUpdated'); 
     }); 
} 

Diese laufen diejenigen nach Taste klicken und speichern Objekt colors. Es funktioniert gut, aber wenn ich die Farbe ändere und erneut auf die Schaltfläche klicke, möchte ich, dass das neue colors Objekt gespeichert wird, anstatt es zu ersetzen, wie es jetzt funktioniert.

So würde ich gerne colors1colors2colors3 und so weiter speichern. Es kann eine Anordnung von Objekten sein. s.o.s

Antwort

2

Speichern Sie es als ein Array. Bevor Sie den nächsten speichern, holen Sie sich den alten Wert, schieben Sie das neue Objekt darauf und speichern Sie es.

+0

Sie sollten '$ localForage.getItem ('Farben')' irgendwo haben. –

+0

@BrahmaDev Die erste Zeile. – Barmar

+0

Warum brauche ich 'getItem' in der ersten Zeile? Beim ersten Funktionslauf habe ich keine Daten im Cache, läuft das dann? – BT101

2

Speichern Sie Farben einfach als ein Array und drücken Sie auf dieses Array, wenn Sie eine neue Farbe schieben möchten. Dann schieben Sie das Array zurück zum lokalen Speicher.

if (vm.convertedColors[vm.convertedColors.length - 1].colorInRGB && 
    vm.convertedColors[vm.convertedColors.length - 1].colorInHSL && 
    vm.convertedColors[vm.convertedColors.length - 1].colorInHEX) { 

    $localForage 
     .getItem("colors") 
     .then((colors) => { 
      colors = colors || []; 
      colors.push({ 
       inHSL: vm.convertedColors[vm.convertedColors.length - 1].colorInHSL, 
       inHEX: vm.convertedColors[vm.convertedColors.length - 1].colorInHEX, 
       inRGB: vm.convertedColors[vm.convertedColors.length - 1].colorInRGB 
      }); 
      return $localForage.setItem("colors", colors); 
     }) 
     .then((err) => { 
      if (err) { 
       console.error(err); 
      } 
      return $localForage.getItem("colors") 
     }) 
     .then((colors) => { 
      console.log(colors); 
     }); 
} 
+0

@Andreas Es tut mir leid, ich habe wahrscheinlich gleichzeitig an meiner Antwort gearbeitet. Soll ich meine Antwort löschen? – zero298

+0

Es gibt genug Unterschiede, wie das Versprechen zurückzugeben, anstatt es direkt aufzurufen, Sie haben es in das 'if' gehüllt. – Barmar

Verwandte Themen