¿Cómo marcar una clase como completada de forma dinámica?
Para completar una clase de manera dinámica, necesitas asegurarte de que cada elemento li (lista) tenga la clase "completed" activada solo si la tarea está finalizada. Dado que el estado de una tarea es un booleano, la asignación puede ser directa, reflejándose inmediatamente en la interfaz gracias al uso de programación reactiva con signals. Esto permite que, al marcar una tarea como completada, aparezca una línea de tachado que la distingue visualmente como terminada.
¿Cómo activar el modo de edición en una tarea?
Para activar el modo de edición en una tarea, necesitas asignar una clase dinámica llamada "editing". Esta clase revela un input que permite editar el título de la tarea al hacer doble clic en él. A continuación, te mostramos los pasos para habilitar este modo:
Usa la clase "editing": Una clase CSS que se activa al entrar en modo de edición.
Input, visible solo en edición: Define un input que aparece solo al activar el modo de edición.
Valor dinámico: Asegúrate de que el input tenga un valor que refleje el título actual de la tarea para editar.
En el modelo de tareas (tasks), se puede agregar un estado opcional editing, que indica si una tarea está en modo de edición o no. Este estado se cambia al hacer doble clic sobre una tarea.
Añadir un estado de edición
Define un estado opcional editing en tu modelo de datos para gestionar el modo de edición:
let task ={title:'Nombre de la tarea',completed:false,editing:false// Estado opcional};
Este estado ayuda a determinar qué tarea está en edición, para que al hacer doble clic solo actives el input de esa tarea y se oculte el resto.
Método para cambiar entre modos
Añade un método para cambiar el modo de edición al hacer doble clic:
Con este método, al hacer doble clic en una tarea específica, se activa su estado de edición y los demás se desactivan, permitiendo editar una tarea a la vez.
¿Cómo guardar cambios en el título de una tarea?
Al terminar de editar, presiona Enter para guardar cambios. Aquí te mostramos cómo lograrlo:
Capturar el evento Enter
Configura un listener para capturar el evento Enter en el input de edición:
Este método asegura que el nuevo título se guarda en la tarea específica, y el modo de edición se desactiva al guardar.
Probar la funcionalidad
Finalmente, prueba la funcionalidad verificando que al editar y presionar Enter, el título de la tarea se actualiza correctamente sin perder los estados visuales previos como la línea de tachado si la tarea está completada.
Siguiendo estos pasos, podrás implementar una edición dinámica y eficiente en tus tareas, mejorando la interacción del usuario con la aplicación. La clave está en usar programación reactiva y manipular el DOM de forma dinámica y efectiva. ¡Adelante, sigue practicando y perfecciona tus habilidades en desarrollo web!
En que momento del curso cambiaron la lógica del metodo updateTask()
Me preguntaba lo mismo!! Me devolví a varios videos y nunca mostró
en algun momento dijo q estaba deprecado, asi que lo dejare con update y no agregare ese mutate
Si google keep deja que yo edite las tareas completadas, voy a hacer lo mismo jaja
La Versión de Angular 17, ya no tiene el metodo mutate sino el metodo update,
Writable signals
const count =signal(0);// Increment the count by 1.count.update(value=> value +1);
Gracias por el aporte!
gracias
En que momento cambio tanto el código , se ve en el código que no usa update, sino que usa mutate eso no fue explicado ? updateTask tenia una lógica y ahora tiene otra, ademas si es una propiedad opcional debería ser [class.editing]="task?.editing" sino esto generará problemas
me perdi con este video al ver tantos cambios en la logica. Hice el cambio en updateTask de update a mutate y me da error, lo deje con update y en la aplicacion no se ejecuta la opcion de modificar la tarea...
Me gustaría saber por qué tiene un mutate ahí y no mostró como lo incorporó
El mutate se utiliza para ejecutar la mutación en Apollo Client y realizar el registro del usuario en la base de datos. No se muestra cómo se incorpora porque no está incluido en el fragmento de código proporcionado en la transcripción.
Hola, no te preocupes el método mutate ya no se usa dentro de signals solo el método update por eso se salto esa parte!
Esta opción en principio ¿actualiza siempre la tarea? Investigue para que este la opción de aceptar con enter o cancelar con escape y como usamos el KeyboardEvent para detectar una tecla pulsada le pase un tercer parametro de modo que en updateTaskText usar un if para que al pulsar enter haga text = input.value pero si la tecla pulsada es escape solo hacer editing:false de modo de recuperar la tarea original ¿Eso esta bien o hay otra forma de hacerlo?
Tu forma está bien, sin embargo, también puedes leer la tecla esc y ejecutar una función para ese comportamiento, ejemplo:
publiceditingMode(index:number, title:string){if(this.tasks()[index].completed){return;}this.updateTaskCtrl.setValue(title);this.tasks.update(tasks =>{return tasks.map((task, i)=>({...task, editing: i === index
}));});}
Yo opte por usar un "ngModel" y adicional le agregue un trim(), para que no permitiera agregar tareas en blanco o espacios luego de corregir una tarea, pero aun asi no consegui solucionar el prohibir enviar los textos vacios, no debe ser complejo pero voy a pasar a la siguiente clase.
Aun que me gusto la clase debo decir que fue muy mal ejecutada en cuanto a la explicacion de procesos, y poco clara con cambios que para un principiante no son facilmente asimilables, perdi 3 horas intentando comprender todos los cambios que aparecieron sin explicacion al comienzo del video, crei me habia saltado alguna clase, y dañe codigo bueno para luego tener que arreglarlo, por lo que no fue agradable ni eficiente el uso de mi tiempo. para los que van a ver la clase les facilito: no es necesario modificar el metodo que maneja el estado del checkbox, y menos agregar ese mutate.
📍Separación entre estado visual y lógica
Me llevo que mantener separados los estados visuales (completed, editing) de la lógica de actualización hace que la aplicación sea más clara, escalable y fácil de mantener.
📍Guardar cambios con eventos de teclado
Me llevo que capturar el evento Enter en el input de edición permite guardar el nuevo título de la tarea de forma natural y salir automáticamente del modo de edición.
📍Edición exclusiva de una tarea
Me llevo que al activar el modo de edición conviene permitir editar una sola tarea a la vez, desactivando el estado editing en las demás para evitar conflictos en la interfaz.
📍Modo edición controlado por estado
Me llevo que el modo de edición se puede manejar agregando un estado editing a cada tarea, permitiendo decidir de forma clara cuándo mostrar un input y cuándo mostrar solo el texto.
📍Marcar tareas como completadas con clases dinámicas
Me llevo que una tarea puede marcarse como completada activando dinámicamente una clase CSS según un valor booleano, logrando que el estado visual (tachado) se actualice automáticamente gracias a la reactividad con Signals.