2017-09-28 1 views
0

안녕하세요 일부 기능에 나는스토어 오브젝트는

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

이 실행 사람 버튼을 클릭하고 저장하는 객체 colors 후 비동기 로컬 스토리지에 불과하다 localForage에 객체 {}을 저장 코드를 가지고있다. 그것은 좋은 일이지만 색상을 변경하고 버튼을 다시 클릭하면 새로운 colors 개체를 저장하는 대신 지금 바꾸는 방법이 필요합니다.

그래서 저는 colors1colors2colors3 등을 저장하고 싶습니다. 객체 배열 일 수 있습니다. s.o.s

답변

2

배열로 저장하십시오. 그런 다음 다음 값을 저장하기 전에 이전 값을 가져 와서 새 객체를 그 위에 저장하고 저장하십시오.

$localForage.getItem('colors').then(function(colors) { 
    colors = colors || []; // initialize as empty array on the first run 
    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 
    }); 
    $localForage.setItem('colors', colors).then(function() { 
     $rootScope.$emit('localForageUpdated'); 
    }); 
}); 
+0

'$ localForage.getItem ('colors')'어딘가에 갖고 싶습니다. –

+0

@BrahmaDev 첫 번째 줄. – Barmar

+0

첫 줄에'getItem'이 필요한 이유는 무엇입니까? 첫 번째 함수를 실행할 때 캐시에 데이터가 없습니다. 그러면이 데이터가 실행됩니까? – BT101

2

색상을 배열로 저장하고 새로운 색상을 넣을 때마다 해당 배열로 밀어 넣기 만하면됩니다. 그런 다음 어레이를 다시 로컬 스토리지로 밀어 넣으십시오.

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 미안하지만, 나는 아마도 내 대답에 동시에 노력하고있었습니다. 내 대답을 삭제하길 원하니? – zero298

+0

약속을 직접 호출하는 대신 반환하는 것과 같은 차이가 있습니다.이를 'if'로 묶었습니다. – Barmar

관련 문제