Validación de formularios y estilos dinámicos en Angular
Resumen
¿Cómo evitar la creación de tareas con valores vacíos?
Para garantizar una experiencia de usuario fluida y evitar entradas no deseadas, es crucial implementar validaciones que impidan la creación de tareas con valores vacíos. Una solución efectiva es utilizar la función trim() en JavaScript, que elimina los espacios al inicio y al final de un string. Esto asegura que las entradas no contienen solamente espacios vacíos.
Aplicar trim() al valor de la tarea:
Al recibir la entrada, aplica trim() para limpiar espacios innecesarios.
Verificación de string vacío:
Después de aplicar trim(), verifica si la cadena resultante está vacía. Si lo está, evita la creación de la tarea.
Uso de expresiones regulares en Angular:
También puedes emplear expresiones regulares mediante la validación pattern de Angular, permitiendo solo patrones de string específicos.
Ejemplo de código:
const tarea = value.trim();if(tarea !==''){// Permitir creación de tarea}else{// Bloquear creación de tarea}
¿Cómo aplicar estilos con SVG y Property Binding en Angular?
Angular no solo permite manipular HTML, sino que también facilita el uso de SVG para gráficos vectoriales escalables. Usar SVG en Angular ofrece una forma poderosa de crear elementos gráficos complejos.
Creación de un elemento SVG:
Inicia con el elemento <svg> y define sub-elementos como <rect> para crear formas.
Determina atributos como width y height.
Modificar atributos de SVG con Property Binding:
Utiliza el prefijo ATTR dentro de Angular para modificar atributos.
Para cambiar un atributo como fill, usa ATTR.fill.
Estas técnicas no solo elevan la funcionalidad y estética de la aplicación, sino que también brindan a los desarrolladores un control exhaustivo sobre el comportamiento visual dinámico y reactivo. Te animo a seguir explorando y aplicando estos conceptos avanzados en tus proyectos. ¡El mundo de la programación es vasto y lleno de oportunidades!
Me dio un poco de ansiedad la verdad 😅 por la expresiones regulares. Mmm dudaba bastante si agregar las validaciones con un if porque por algo angular no esta dando los validators, lo único malo es que me falta aprender más sobre expresiones regulares. Pero bueno, a seguir 🙂.
Buen punto
Yo también tengo pediente terminar el curso de Expresiones Regulares, lo tengo empezado desde hace mucho.
Lo implemente con el if dentro de la validación pero sin notificar al usuario. Ahora viendo que estaba bien agregue un flag para el caso que venga vacio pero con espacios y con el *ngIf presentar un mensaje al usuario que debe ingresar un titulo y no espacios. Lo que me falta es saber que color usar para las alertas y si hay alguna propiedad de this.newTaskCtrl que puede usarse como flag para no agregar una propiedad especifica.
como practica estaria bien, pero a nivel funcional mostrar esos errores al usuario no sería sobresaturarlo ?
Manuel, siempre hay que notificar al usuarios sobre los errores de un formulario
Con la Regex:
Validators.pattern('\s')
My bad, la correcta es:
Validators.pattern(/^\S*$/)
Esto significa que los FormControl son implícitamente un signal?
El FormControl y los signals tienen algunas similitudes en términos de manejo de datos reactivos, pero se usan en contextos ligeramente diferentes y con diferentes enfoques.
Similitudes entre FormControl y Signals:
Reactividad:
Tanto FormControl como signals están diseñados para ser reactivos. Ambos permiten que tu aplicación reaccione automáticamente a los cambios en el estado de los datos.
En el caso de FormControl, cualquier cambio en su valor (por ejemplo, cuando el usuario escribe en un campo) puede activar actualizaciones en la vista (usando data binding).
Con signals, el valor también puede cambiar y propagar esos cambios a otros componentes o partes de tu aplicación de forma reactiva.
Actualización de la vista:
Ambos conceptos están pensados para actualizar la vista de manera eficiente cuando el valor cambia.
Signals en Angular permiten que los componentes respondan a los cambios de forma declarativa.
FormControl también actualiza la vista automáticamente, especialmente cuando se usa con la directiva formControlName o formControl, reaccionando a los cambios del control de formulario.
Simplicidad en el manejo de estado:
Ambos permiten que tu código sea más sencillo y menos propenso a errores, ya que gestionan el estado y las actualizaciones automáticamente sin que tengas que escribir mucho código para hacerlo.
Los signals funcionan con un sistema de señales que simplifica la gestión del estado reactivo.
FormControl maneja la validación y los cambios de estado del formulario de manera sencilla.
Diferencias clave:
Propósito y contexto de uso:
FormControl es una parte integral del sistema de formularios reactivos en Angular, y se usa específicamente para gestionar el estado, el valor y las validaciones de los campos de un formulario.
Signals es un concepto más general y no está limitado a formularios. En Angular 16, los signals proporcionan una forma más simple y eficiente de gestionar el estado reactivo en general, independientemente de si estás trabajando con formularios o no.
Uso con componentes:
Signals proporcionan una forma más genérica de declarar y reaccionar a cambios de estado en componentes o en cualquier parte de la aplicación Angular. Pueden ser utilizados de forma aislada para manejar datos reactivos sin necesidad de formularios.
FormControl está más enfocado en gestionar valores dentro de formularios y sus validaciones. Aunque también es reactivo, su propósito principal es simplificar la gestión de formularios en lugar de ofrecer una solución reactiva general.
Manejo explícito vs. implícito:
FormControl requiere cierta configuración inicial (como validaciones, valor predeterminado) y explícitamente tiene que ser utilizado dentro de un formulario o FormGroup. Los cambios en el FormControl se reflejan en los campos de entrada del formulario automáticamente.
Signals trabajan de una manera más simple y directa, eliminando la necesidad de manejar formularios, y se usan más como un estado reactivo para cualquier tipo de dato en la aplicación.
✅
Así lo hice yo,
if(this.newTaskCtrl.valid&&this.newTaskCtrl.value.trim()!==''){const value =this.newTaskCtrl.value;this.addTask(value);this.newTaskCtrl.setValue('')}``` if(this.newTaskCtrl.valid&&this.newTaskCtrl.value.trim()!==''){const value =this.newTaskCtrl.value;this.addTask(value);this.newTaskCtrl.setValue('')} 
Con solo agregar la expresión regular con el negativo del espacio al inicio y al final del texto capturado y aceptando cualquier carácter entre estos, eso incluye palabras separadas por espacios. Se permitirá capturar solo el texto que no tenga espacios al inicio o al final eso incluiría cuando no escriba nada.
Me hizo un poco de ruido que usara <span>, ya que es una etiqueta inline, no una de tipo block. Recuerdo que esto lo mencionó Teffcode en algún video; dejó la página que en ese entonces sugirió:
pero que interesante que pueda cambiar un inline a un block.
Me llevo que Angular permite modificar estilos CSS en tiempo real usando Property Binding con style, incluso controlando unidades como px, lo que resulta ideal para interfaces dinámicas e interactivas.
📍Property Binding para atributos SVG
Me llevo que para modificar atributos de SVG desde Angular se utiliza [attr.nombreAtributo], como [attr.fill], permitiendo controlar colores y propiedades gráficas de forma reactiva.
📍Uso de SVG con Angular
Me llevo que Angular permite trabajar directamente con SVG, lo que habilita gráficos vectoriales dinámicos y escalables dentro de la aplicación sin depender de imágenes externas.
📍Validación adicional con Angular
Me llevo que además de lógica manual con trim(), Angular permite usar validaciones por patrón (regex) para reforzar las reglas y asegurar que los inputs cumplan formatos específicos.
📍Evitar tareas vacías correctamente
Me llevo que aplicar trim() al valor del input es una solución simple y efectiva para evitar crear tareas con solo espacios, mejorando la calidad de los datos desde el origen.
yo lo hice de esta manera, guiándome por el anterior y averiguando cual me podría servir para quitar los espacios vacíos.
Comparto mi solución del reto anterior
changeHandler(){if(this.newTacksCtrl.valid){const value =this.newTacksCtrl.value;if(!value.includes(' ')){this.addNewTacks(value);this.newTacksCtrl.setValue('');}else{console.log('empty detect')}}}
Se escapo un log, pr rechazado
Si por ejemplo pones "Crear proyecto" debería dejarte, pero en este caso no lo hace, porque si que incluye un espacio entre medias.
mi aporte con el svg para manejo del fill usando un circulo
Genial, los reto a controlar el background de la clase container, les va a encantar, yo lo hice asi:
en el html:
<div class="container"[style.backgroundColor]="backgroundContainerControl.value"><h4>Modifica el background del contenedor desde aqui</h4><input type="color"[formControl]="backgroundContainerControl">```en el componente:
```js
backgroundContainerControl =newFormControl('#ffffff');```backgroundContainerControl =newFormControl('#ffffff');