src/app/list/todo/todo.component.ts
The todo component
Example :<todo>
[todo]="todo"
</todo>
selector | todo |
standalone | true |
imports |
DoNothingDirective
|
templateUrl | ./todo.component.html |
Properties |
Methods |
Inputs |
constructor(todoStore: TodoStore)
|
||||||
Defined in src/app/list/todo/todo.component.ts:36
|
||||||
Parameters :
|
todo | |
Type : Todo
|
|
Required : true | |
Defined in src/app/list/todo/todo.component.ts:31
|
|
The entry todo from the parent list |
cancelEditingTodo | ||||||
cancelEditingTodo(todo: Todo)
|
||||||
Defined in src/app/list/todo/todo.component.ts:59
|
||||||
Parameters :
Returns :
void
|
editTodo | ||||||
editTodo(todo: Todo)
|
||||||
Defined in src/app/list/todo/todo.component.ts:50
|
||||||
Parameters :
Returns :
void
|
remove | ||||||
remove(todo: Todo)
|
||||||
Defined in src/app/list/todo/todo.component.ts:42
|
||||||
Parameters :
Returns :
void
|
stopEditing |
stopEditing(todo: Todo, editedTitle: string)
|
Defined in src/app/list/todo/todo.component.ts:54
|
Returns :
void
|
toggleCompletion | ||||||
toggleCompletion(todo: Todo)
|
||||||
Defined in src/app/list/todo/todo.component.ts:46
|
||||||
Parameters :
Returns :
void
|
updateEditingTodo |
updateEditingTodo(todo: Todo, editedTitle: string)
|
Defined in src/app/list/todo/todo.component.ts:63
|
Returns :
any
|
todoStore |
Type : TodoStore
|
Defined in src/app/list/todo/todo.component.ts:36
|
Local reference of TodoStore |
This is the core component of the application.
It display the line of one todo task, and APIs for edition & delete
This is an extract of these APIs
Example :export class TodoComponent {
...
editTodo(todo: Todo) {
todo.editing = true;
}
...
}
import { Component, Input } from '@angular/core';
import { Todo } from '../../shared/models/todo.model';
import { TodoStore } from '../../shared/services/todo.store';
import { DoNothingDirective } from 'src/app/shared/directives/do-nothing.directive';
/**
* The todo component
* ```html
* <todo>
* [todo]="todo"
* </todo>
* ```
* <example-url>../screenshots/todo/todo.png</example-url>
*/
@Component({
selector: 'todo',
templateUrl: './todo.component.html',
standalone: true,
imports: [DoNothingDirective],
})
export class TodoComponent {
/**
* The entry todo from the parent list
*/
@Input({
required: true,
alias: 'todo',
})
todo: Todo;
/**
* Local reference of TodoStore
*/
todoStore: TodoStore;
constructor(todoStore: TodoStore) {
this.todoStore = todoStore;
}
remove(todo: Todo) {
this.todoStore.remove(todo);
}
toggleCompletion(todo: Todo) {
this.todoStore.toggleCompletion(todo);
}
editTodo(todo: Todo) {
todo.editing = true;
}
stopEditing(todo: Todo, editedTitle: string) {
todo.title = editedTitle;
todo.editing = false;
}
cancelEditingTodo(todo: Todo) {
todo.editing = false;
}
updateEditingTodo(todo: Todo, editedTitle: string) {
editedTitle = editedTitle.trim();
todo.editing = false;
if (editedTitle.length === 0) {
return this.todoStore.remove(todo);
}
todo.title = editedTitle;
this.todoStore.update();
}
}
<li [class.completed]="todo.completed" [class.editing]="todo.editing">
<div class="view">
<input class="toggle" type="checkbox" (click)="toggleCompletion(todo)" [checked]="todo.completed">
<label (dblclick)="editTodo(todo)" donothing>{{todo.title}}</label>
<button class="destroy" (click)="remove(todo)"></button>
</div>
<input class="edit" *ngIf="todo.editing" [value]="todo.title" #editedtodo
(blur)="stopEditing(todo, editedtodo.value)" (keyup.enter)="updateEditingTodo(todo, editedtodo.value)"
(keyup.escape)="cancelEditingTodo(todo)">
</li>