@ -14,14 +14,18 @@ export abstract class KeyModel {
|
||||
}
|
||||
|
||||
export class Todo extends KeyModel {
|
||||
constructor(key: number, public title: string, public completed: boolean) { super(key); }
|
||||
constructor(key: number, public title: string, public completed: boolean) {
|
||||
super(key);
|
||||
}
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class TodoFactory {
|
||||
private _uid: number = 0;
|
||||
|
||||
nextUid(): number { return ++this._uid; }
|
||||
nextUid(): number {
|
||||
return ++this._uid;
|
||||
}
|
||||
|
||||
create(title: string, isCompleted: boolean): Todo {
|
||||
return new Todo(this.nextUid(), title, isCompleted);
|
||||
@ -33,9 +37,13 @@ export class TodoFactory {
|
||||
export class Store<T extends KeyModel> {
|
||||
list: T[] = [];
|
||||
|
||||
add(record: T): void { this.list.push(record); }
|
||||
add(record: T): void {
|
||||
this.list.push(record);
|
||||
}
|
||||
|
||||
remove(record: T): void { this.removeBy((item) => item === record); }
|
||||
remove(record: T): void {
|
||||
this.removeBy((item) => item === record);
|
||||
}
|
||||
|
||||
removeBy(callback: (record: T) => boolean): void {
|
||||
this.list = this.list.filter((record) => !callback(record));
|
||||
|
@ -23,7 +23,9 @@ export class TodoApp {
|
||||
inputElement.value = '';
|
||||
}
|
||||
|
||||
editTodo(todo: Todo): void { this.todoEdit = todo; }
|
||||
editTodo(todo: Todo): void {
|
||||
this.todoEdit = todo;
|
||||
}
|
||||
|
||||
doneEditing($event: KeyboardEvent, todo: Todo): void {
|
||||
const which = $event.which;
|
||||
@ -37,18 +39,28 @@ export class TodoApp {
|
||||
}
|
||||
}
|
||||
|
||||
addTodo(newTitle: string): void { this.todoStore.add(this.factory.create(newTitle, false)); }
|
||||
addTodo(newTitle: string): void {
|
||||
this.todoStore.add(this.factory.create(newTitle, false));
|
||||
}
|
||||
|
||||
completeMe(todo: Todo): void { todo.completed = !todo.completed; }
|
||||
completeMe(todo: Todo): void {
|
||||
todo.completed = !todo.completed;
|
||||
}
|
||||
|
||||
deleteMe(todo: Todo): void { this.todoStore.remove(todo); }
|
||||
deleteMe(todo: Todo): void {
|
||||
this.todoStore.remove(todo);
|
||||
}
|
||||
|
||||
toggleAll($event: MouseEvent): void {
|
||||
const isComplete = ($event.target as HTMLInputElement).checked;
|
||||
this.todoStore.list.forEach((todo: Todo) => { todo.completed = isComplete; });
|
||||
this.todoStore.list.forEach((todo: Todo) => {
|
||||
todo.completed = isComplete;
|
||||
});
|
||||
}
|
||||
|
||||
clearCompleted(): void { this.todoStore.removeBy((todo: Todo) => todo.completed); }
|
||||
clearCompleted(): void {
|
||||
this.todoStore.removeBy((todo: Todo) => todo.completed);
|
||||
}
|
||||
}
|
||||
|
||||
@NgModule({declarations: [TodoApp], bootstrap: [TodoApp], imports: [BrowserModule]})
|
||||
|
Reference in New Issue
Block a user