2016-11-14 2 views
2

В моем приложении Ионные я добавил плагин «ngStorage» и поставляется с небольшим демо-код:Сохранить ключ => значение стиля с ngStorage/LocalStorage

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

Это работает точно так же, как сказал. I add("foo") это, и делать getAll() и значение есть. Я удаляю add(), но сохраняю getAll(), у меня все еще есть значение «foo» (как и ожидалось).

Это не очень полезно для меня, я хочу, чтобы получить доступ к нему с помощью клавиш, так что я сделал следующее:

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

Когда я делаю addByKey("foo","bar"), а затем getAll() я получаю значение точно как я хочу. Когда я удаляю addByKey() и перезагружаюсь, я ожидаю, что он все еще помнит установленную информацию, но ее не существует. Однако первая попытка с помощью функции add() по-прежнему существует, «foo» все еще существует (это означает, что массив не сбрасывается).

Как создать тип типа key-> value?


В случае, если это полезно:

.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

Смежные вопросы