(Angular 2/4)如何从作为数组的本地存储值中删除对象

时间:2017-11-04 23:46:45

标签: arrays angular typescript local-storage

我想在单击删除按钮时删除该项目。

我试图找到该项的数组索引并使用Splice函数。没有运气了。

我能够访问被点击的项目,但不能访问属性_title,它是todo模型中的私有变量。我打算使用标题映射数组,但_title返回为'undefined'。

我认为localStorage.removeItem不是一个有效选项,因为所有内容都存储在值中。

无论如何,我在这一点上真的很失落。我将不胜感激任何帮助!

tl; dr我如何获得项目的索引#或_title,它是模型中的私有变量?

本地存储看起来像这样:

键 - STORAGE_ITEM_NAME

价值 - [{“_完成”:false,“_ title”:“创建Todo App”},{“_ completed”:false,“_ title”:“Debug”}]

如果这有帮助,这是Injector Graph

// TODO-item.component

onRemoveTodo() {
    this.remove.emit(this.todo);
}

// TODO-list.component

removeTodo(todo: Todo) {
  this.TodoStoreService.remove(todo);
}

// TODO-store.service

remove(todo: Todo) { 
/*this is where I need help*/
}

// storage.service

export class StorageService {
storage = window.localStorage;

has(name: string): boolean {
    return this.get(name) !== null;
}

get(name: string): any {
    const item = this.storage.getItem(name);

    try {
        return JSON.parse(item);
    } catch (err) {
        return null;
    }
}

set(name: string, value: any) {
    this.storage.setItem(name, JSON.stringify(value));
}

remove(name: string) {
    this.storage.removeItem(name);
}
}

// todo

export class Todo {
private _completed = false;
private _title: string;

constructor(title: string, completed = false) {
    this._title = title;
    this._completed = completed;
}

get completed(): boolean {
    return this._completed;
}

get title(): string {
    return this._title;
}
set title(value: string) {
    this._title = value.trim();
}

toggle() {
    this._completed = !this._completed;
}
}

0 个答案:

没有答案