从数组 Ionic 2 Storage 中删除元素
Removing an element form an array Ionic 2 Storage
我已经使用键'todo'[=将数据数组设置到存储中42=] 在 数据提供者中 作为
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
中删除数组。我想删除一个数组 with id 3
{ id: 3, title: "lorem epsum", body: "lorem epsum" }
我已经使用存储功能remove(key)
删除了一个数组
但它显示的错误类似于
3 used as a key, but it is not a string.
我想尝试使用标题,但项目的标题可能不是唯一的。所以,我尝试使用 id 删除数组。
如有任何帮助,我们将不胜感激。
谢谢。
您的存储存储在哪里?您可以在 Dom/Console 中显示您的数据吗?请记住,如果 id 未设置您的数据,则默认计数始终从 0 开始,因此 0,1,2,3 其中 3 是第 4 行。因此从这里看来您正在删除键 3 并可能是 [=35 的键=] 方法而不是删除第 3 行。删除的示例应如下所示:
this.storage.remove(a => a.id).where(a.id == 3);
或者正确的语法可能是:
this.storage.remove(this.storage.key(id));
如果您向我们展示您的全部 code/class 我们可以提供更好的建议。
**编辑*****
@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();
}
}
这是我在别处找到的示例,主要区别可能在于:
- 你没有setting/instatiating关键数据先
- 提取 ID 3 如果没问题,但此 ID 3 和密钥也是 3 之间可能存在冲突。
- 可能是不允许删除键 3,无论您尝试删除的字符串是什么,并且您正在尝试删除键而不是 id: 3。
尝试示例,但也许查找更多 'Ionic CRUD' 的示例,您可能会成功。希望这对您有所帮助!
使用this.storage.remove(key)
.Key为数组元素在存储中的ID
我已经使用键'todo'[=将数据数组设置到存储中42=] 在 数据提供者中 作为
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
中删除数组。我想删除一个数组 with id 3
{ id: 3, title: "lorem epsum", body: "lorem epsum" }
我已经使用存储功能remove(key)
删除了一个数组
但它显示的错误类似于
3 used as a key, but it is not a string.
我想尝试使用标题,但项目的标题可能不是唯一的。所以,我尝试使用 id 删除数组。
如有任何帮助,我们将不胜感激。
谢谢。
您的存储存储在哪里?您可以在 Dom/Console 中显示您的数据吗?请记住,如果 id 未设置您的数据,则默认计数始终从 0 开始,因此 0,1,2,3 其中 3 是第 4 行。因此从这里看来您正在删除键 3 并可能是 [=35 的键=] 方法而不是删除第 3 行。删除的示例应如下所示:
this.storage.remove(a => a.id).where(a.id == 3);
或者正确的语法可能是:
this.storage.remove(this.storage.key(id));
如果您向我们展示您的全部 code/class 我们可以提供更好的建议。
**编辑*****
@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();
}
}
这是我在别处找到的示例,主要区别可能在于:
- 你没有setting/instatiating关键数据先
- 提取 ID 3 如果没问题,但此 ID 3 和密钥也是 3 之间可能存在冲突。
- 可能是不允许删除键 3,无论您尝试删除的字符串是什么,并且您正在尝试删除键而不是 id: 3。
尝试示例,但也许查找更多 'Ionic CRUD' 的示例,您可能会成功。希望这对您有所帮助!
使用this.storage.remove(key)
.Key为数组元素在存储中的ID