2016-11-14 8 views
2

와 가치 스타일은 내가 플러그인 'ngStorage'을 추가했습니다 그리고 약간의 데모 코드와 함께 제공 : 이야기로저장 키 => 내 이온 애플리케이션에서 ngStorage/로컬 스토리지

var add = function (thing) { 
    $localStorage.things.push(thing); 
} 

이 정확히 작동합니다. 나는 add("foo")이며, getAll()을하고 그 값이 있습니다. add()을 제거했지만 getAll()을 유지하고, 예상 한대로 "foo"값을 유지합니다.

이 나를 위해 매우 유용하지 않습니다, 나는 키에 액세스하려는, 그래서 나는 다음했습니다 : 나는 addByKey("foo","bar") 다음 getAll()을 할 때 나는 정확하게 값을 얻을

var addByKey = function (key, value) { 
    $localStorage.things[key] = value; 
    // Or, I've also tried: 
    $localStorage.things.key = value; 
} 

내가 원하는대로. addByKey()을 제거하고 새로 고침하면 설정 정보를 기억할 것으로 기대되지만 존재하지 않습니다. 그러나 add() 함수를 통한 첫 번째 시도는 여전히 존재하며 "foo"는 여전히 존재합니다 (배열이 다시 설정되지 않음을 의미).

키 - 값 유형의 구조를 만들려면 어떻게해야합니까?

.factory ('StorageService', function ($localStorage) { 
    $localStorage = $localStorage.$default({ 
     things: [] 
    }); 
    var _getAll = function() { 
     return $localStorage.things; 
    }; 

    var _add = function (thing) { 
     $localStorage.things.push(thing); 
    } 
    var _addByKey = function (thing, value) { 
     $localStorage.things[key] = value; 
     // Or, I've also tried: 
     $localStorage.things.key = value; 
    } 

    return { 
     getAll: _getAll, 
     add: _add, 
     addByKey: _addByKey 
    }; 
}) 

답변

1

모든 키가이의 속성으로 설정 될 수 있도록 당신이 단순히 배열 대신 객체를 사용할 수있는 키 값 저장 시스템을 원하는 가정 : 경우


이 유용있어 목적.


.factory('StorageService', function($localStorage) { 
    $localStorage = $localStorage.$default({ 
     things: {} 
    }); 

    var _getAll = function() { 
     return $localStorage.things; 
    }; 
    var _addByKey = function(thing, value) { 
     $localStorage.things[thing] = value; 
    } 

    return { 
     getAll: _getAll, 
     addByKey: _addByKey 
    }; 
}) 

그러나, 메인 컬렉션의 모든 값의 참조를 유지하고 키를 통해 액세스 할 가정, 당신은 배열의 things intead를 저장하는 객체를 사용하여 고려할 수 있습니다. 따라서 속성을 사용하여 모든 항목을 저장하고 (다른 위치에도 저장할 수 있음)이 객체를 사용하여 컬렉션에서 원하는 값을 참조하여 키를 저장합니다.

컬렉션과 사전 사이의 일관성을 유지하려면 삭제 논리를 구현해야 할 수도 있습니다.

귀하의 공장과 같을 것이다 :

.factory('StorageService', function($localStorage) { 
    $localStorage = $localStorage.$default({ 
     things: { 
      items: [] 
     } 
    }); 

    var _getAll = function() { 
     return $localStorage.things.items; 
    }; 

    var _add = function(thing) { 
     $localStorage.things.items.push(thing); 
    } 
    var _addByKey = function(thing, value) { 

     var i = $localStorage.things.items.push(value) - 1; 
     $localStorage.things[thing] = $localStorage.things.items[i]; 
    } 

    return { 
     getAll: _getAll, 
     add: _add, 
     addByKey: _addByKey 
    }; 
}) 
+0

은'things' 부분은 예로서 만 존재한다. '아이템'을 사용하는 곳에서는 '물건'을 사용합니다. 나는 그 차이점을보기 위해 답을 다시 읽을 것입니다. – Martijn

+0

@Martijn 특정 콜렉션처럼 작동하도록 변경해야합니다. '$ localStorage'의 루트에 저장하고 싶지는 않습니다. 저장소에 저장해야 할 수도 있습니다. 이 실제 컬렉션이 아닌 다른 것들. 그러나 문제가 아닌 경우이를 루트로 옮길 수도 있습니다. {D –

+0

답변으로 배열 솔루션을 제공한다고 생각하면 정확합니까? 그렇다면 객체 솔루션은 키 문제가 사라지게된다면 문제가되지 않을 것입니다. – Martijn