Удаление элемента из массива 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();
}


    }

Это пример, который я нашел в другом месте, и основным отличием может быть то, что:

  1. Вы не устанавливаете / не устанавливаете ключевые данные первыми
  2. Потяните ID 3, если все в порядке, но возможное столкновение между этим ID 3 и ключом, который тоже 3.
  3. Может быть так, что удаление ключа 3 не разрешено, независимо от того, какую строку вы пытаетесь удалить, и ВЫ пытаетесь удалить ключ, а не идентификатор: 3.

Попробуйте примеры, но, возможно, посмотрите больше примеров "Ionic CRUD", и у вас получится. Надеюсь это поможет!

Другие вопросы по тегам