Agregar un checkbox
Ahora podemos interactuar con nuestra lista de tareas al eliminar elementos. Pero si nosostros queremos completar elementos, y todavía tenerlos en nuestra lista, por ejemplo, tener una linea tachando el título? ¡Agregamos un checkkbox!
Vamos a:
- Agregar un checkbox
- Agregar la funcionalidad de que al clickear el checkbox agregaremos una clase CSS, la cual agregará el estilo de tachar el título de nuestros elementos
- Editar el título para que responda al checkbox
- Agregar una nueva clase CSS
Comencemos agregando un checkbox en nuestro archivo item.component.ts
. Coloca el siguiente código después de la etiqueta <p>
que contiene el {{todoItem.title}}
:
<input type="checkbox"/>
Ahora, para que el checkbox haga algo, necesitamos agregar un evento de click el cual llamará la función completeItem()
:
<input type="checkbox" (click)="completeItem()"/>
Cuando hacemos click en el checkbox se ejecutará la función completeItem()
. Vamos a hablar sobre lo que esta función debe hacer. Queremos ser capaces de cambiar el estilo del título del CSS cuando el checkbox esté marcado colocando una línea atravesándolo, y sin la línea cuando no estee marcado. Para lograr esto vamos a colocar una variable alternada para que sea true
o false
que represente los estados de marcado/no-marcado. Agrega el siguiente código a la clase ItemComponent
:
isComplete: boolean = false;
completeItem() {
this.isComplete = !this.isComplete;
}
¡Pero espera! ¿Cómo va a hacer esto efecto al título cuando solamente estamos tocando el checkbox? Bueno, Angular tiene esta maravillosa directiva llamada ngClass. Esta directiva aplica o elimina una clase CSS en función de un valor booleano (true
/false
). Aquí hay muchas maneras de usar esta directiva (Mira la documentación aquí) Pero nos enfocaremos en usarla así:
<some-element [ngClass]="{'first': true, 'second': true, 'third': false}">...</some-element>
Las clases 'first' y 'second' serán aplicadas al elemento porque se les dió el valor true
, mientras que la clase 'third' no será aplicada porque se le dió el valor false
. Aquí es donde el código viene a jugar. Nuestra función completeItem()
alternará entre true
y false
, esto nos dirá si la clase debe ser colocada o eliminada.
Vamos a añadir la directiva ngClass
a nuestro títlo ahora:
<p class="todo-title" [ngClass]="{'todo-complete': isComplete}">
{{ todoItem.title }}
</p>
Y finalmente, agregaremos el css a nuestro archivo item.component.css
.todo-complete {
text-decoration: line-through;
}
¡Et Voila! Verifica que el checkbox aplique la línea através del título cuando se marque y la elimine cuando se desmarque.