Удаление элемента из массива Ionic 2 Storage
Я установил массив данных в хранилище с ключом "todo" в поставщике данных как
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
@Injectable()
export class DataProvider {
constructor(public storage: Storage) {
console.log('Hello DataProvider Provider');
}
getData() {
return this.storage.get('todos');
}
save(data){
this.storage.set('todos', data);
}
remove(id){
console.log("Removing data ID:",id);
this.storage.remove(id);
}
}
data
состоит из массива со свойствами id, title, body как
{ id: 0, title: "lorem epsum", body: "lorem epsum" }
{ id: 1, title: "lorem epsum", body: "lorem epsum" }
{ id: 2, title: "lorem epsum", body: "lorem epsum" }
{ id: 3, title: "lorem epsum", body: "lorem epsum" }
{ id: 4, title: "lorem epsum", body: "lorem epsum" }
Теперь, что я пытаюсь сделать, это удалить массив изdata
, Я хочу удалить массив с идентификатором 3
{ id: 3, title: "lorem epsum", body: "lorem epsum" }
Я использовал функцию хранения remove(key)
удалить один массив
Но это показывает ошибку, как
3 used as a key, but it is not a string.
Я хочу попробовать с названием, но название элемента может быть не уникальным. Итак, я попытался удалить массив с помощью идентификатора.
Любая помощь будет оценена.
Спасибо.
2 ответа
Использование this.storage.remove(key)
Ключ - это идентификатор элемента массива в хранилище.
Где хранится ваше хранилище? Можете ли вы отобразить свои данные в Dom/Console? Помните, что если для идентификаторов не установлены ваши данные, то счетчик по умолчанию всегда начинается с 0, поэтому 0,1,2,3, где 3 - строка 4. Итак, из этого получается, что вы удаляете ключ 3 и запрашиваете ключ ядра / ключа метод вместо удаления строки 3. Пример удаления должен выглядеть так:
this.storage.remove(a => a.id).where(a.id == 3);
Или правильный синтаксис может быть:
this.storage.remove(this.storage.key(id));
Если вы покажете нам весь свой код / класс, мы можем посоветовать лучше.
**РЕДАКТИРОВАТЬ*****
@Injectable()
export class DataProvider {
constructor(public storage: Storage) {
console.log('Hello DataProvider Provider');
}
//Set/Instantiate data
var totalItems = this.storage.length,
stored = document.getElementById('stored'),
addButton = document.getElementById('add-button'),
subButton = document.getElementById('sub-button');
addButton.addEventListener('click', addToStorage);
subButton.addEventListener('click', removeStorage);
updateStorage(); // adds stored timestamps to #stored div
function updateStorage(){
// Reset/update innerHTML for #stored div
stored.innerHTML = "Stored Results<br>"
for(item in this.storage) {
var obj = JSON.parse(this.storage[item]);
stored.innerHTML += obj.time + '<br>';
}
}
function addToStorage(event) {
// Create a new this.storage property and assign its value
var propName = 'item' + totalItems;
this.storage.setItem( propName, JSON.stringify( {'time': (event.timeStamp).toString(), 'target': (event.target).toString()} ) );
totalItems = this.storage.length;
// Add new value to #stored element
var obj = JSON.parse(this.storage[propName]);
stored.innerHTML += obj.time + '<br>';
}
function removeStorage() {
// Remove the latest property from this.storage
var propName = 'item' + (totalItems - 1);
this.storage.removeItem(propName);
totalItems = this.storage.length;
// Update html to reflect changes
updateStorage();
}
}
Это пример, который я нашел в другом месте, и основным отличием может быть то, что:
- Вы не устанавливаете / не устанавливаете ключевые данные первыми
- Потяните ID 3, если все в порядке, но возможное столкновение между этим ID 3 и ключом, который тоже 3.
- Может быть так, что удаление ключа 3 не разрешено, независимо от того, какую строку вы пытаетесь удалить, и ВЫ пытаетесь удалить ключ, а не идентификатор: 3.
Попробуйте примеры, но, возможно, посмотрите больше примеров "Ionic CRUD", и у вас получится. Надеюсь это поможет!