从阵列Ionic 2 Storage中删除元素

时间:2018-01-23 15:13:57

标签: javascript arrays ionic2 ionic-storage

将数据数据设置为存储,并使用中的键' 数据提供者为

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 中删除数组。我想删除一个ID为的数组

{ id: 3, title: "lorem epsum", body: "lorem epsum" }

我已使用存储功能remove(key)删除一个数组

但它显示的错误如

3 used as a key, but it is not a string.

我想尝试使用标题,但该项目的标题可能不是唯一的。所以,我试图使用id删除数组。

任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:1)

使用 @if (session('status')) <div class="alert alert-info"> {{ session('status') }} </div> @endif 。密钥是存储

中数组元素的ID

答案 1 :(得分:0)

您的存储位于何处?你能在Dom / Console中显示你的数据吗?请记住,如果id未设置您的数据,则默认计数始终从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而不考虑您尝试删除的字符串,并且您试图删除密钥而不是ID:3。
  4. 试试这些例子,但也许会查找更多关于“离子CRUD”的例子。你可能会成功希望这有帮助!