Conociendo la directiva [(ngModel)] que nos facilita el intercambio de datos de forma bidireccional entre la vista y el componente, puedes crear tu primer formulario apoyándote de esta directiva y de otras características propias de Angular para el manejo y validación de formularios.
Paso 1
Crea un simple formulario de Login en el HTML y las variables en el componente para capturar los valores de los campos con ngModel:
@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.scss']})exportclassAppComponent{ form ={email:'', password =''};}
Agregale al componente un método que responda al evento del envío del formulario llamado submitLogin(). Puedes enlazar este método al formulario con la directiva (ngSubmit) que va colocada en la etiqueta <form> junto con una variable de template para ponerle un nombre al formulario como por ejemplo #formLogin="ngForm". Tienes que igualar el nombre de tu variable a ngForm para que Angular reconozca que se trata de un formulario.
@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.scss']})exportclassAppComponent{ form ={email:'', password =''};submitLogin(){// Login del usuario}}
Finalmente, gracias a esta conexión de tu formulario con el componente, se activará el método submitLogin() al hacer clic en el botón. Para validar tu formulario, utiliza la variable de template para imprimir un mensaje de error en pantalla o deshabilitar el botón de envío de la siguiente manera:
Tienes razón, yo venia aplazando el aprender Angular, pero ahora que me veo obligado por mi trabajo, tuve la suerte de tomar este curso en Platzi con un gran profesor.
Wow, terminando este modulo, me doy cuenta que Angular tiene super poderes, nos facilita mucho en cuanto a validaciones de entrada de texto, bloqueos de elementos en el dom, y todo esto con puros metodos/propiedades ya insertadas en Angular.
¿ Cuando hablan de trabajo honesto a que se refieren ?
A que no se lo copiaron de Stack Overflow
Lo encontraron en Google
Se lo robaron a otra persona.
De lo contrario un código que hayas realizado por ti mismo personalmente pienso que no tiene nada que ver con la honestidad a no ser que los codificadores o programadores de hoy en día antes de hacer el código por si mismos sean deshonestos y acudan a los tres puntos que ya he mencionado con anterioridad.
algo que no veo que mencionen es que los inputs tienen un validador para el email un poco mejor y es usando el atributo
pattern="^[^@]+@[^@]+\.[a-zA-Z]{2,}$"
podriamos usar esa aexpresion regular para validar el formato de email. ya que como queda finalmente el formulario, puedes poner una letra y ya es valido, con esto obliga al usuario a poner un email de forma correcta
Pequeño aporte: Con todo lo aprendido ya podemos crear un formulario sencillo de registro y hacer algunas validaciones. Lo primero sería crear el modelo de datos que se van a registrar en nuestro controlador
Lo segundo es crear el “form” con los inputs dentro. Cada input va a estar manejado con [(ngModel)] y va corresponder a uno de las propiedades del objeto “register”.
Luego creamos el botón para registrar esos datos. Algo muy importante a tener en cuenta es que siempre que estemos utilizando botones dentro de formularios debemos colocarle un type de algún tipo. En el caso de que se trate del botón que va a enviar la información será de tipo submit “submit”. Aquí es donde podemos colocar una validación para el conjunto de los inputs del formulario haciendo que el botón quede deshabilitado hasta tanto no se completen todos los campos. Esto lo hacemos usando property binding con el atributo disabled e igualandolo a la versión “invalid” de la variable template “formRegister”.
Por último solo resta especificar la acción que se va ejecutar una vez que el formulario sea enviado. Para esto en la etiqueta form utilizamos (ngSubmit) y lo igualamos a una función, declarada en el controlador, que por el momento solo va a mostrar por consola los datos ingresados.
Como se ha visto en clases agregamos una almohadilla o numeral y le asignamos un nombre luego le indicamos que será un ngForm.
Una vez tenemos esto podemos validar los campos del formulario de la siguiente manera:
<divclass="form-control"><inputplaceholder="Email"type="email"name="email"required[(ngModel)]="register.email"/><spanclass="helper-text"[class.visible]=" (registerForm.submitted || registerForm.controls['email']?.touched) &&
registerForm.controls['email'].invalid
"> Error el campo email es requerido
</span></div>
Lo que hacemos aquí es agregar una clase visible al span que contiene la clase helper-text basado en la condición de que el usuario ha enviado el formulario o ya interactuó con el y además el campo es invalido.
Si quieren saber mas del funcionamiento de NgForm les recomiendo la documentación también les dejo la documentación de los controles del formulario.
El formulario completo quedaría de la siguiente forma:
<formclass="form"#registerForm="ngForm"(ngSubmit)="onSubmit(registerForm)"><divclass="form-control"><inputplaceholder="Email"type="email"name="email"required[(ngModel)]="register.email"/><spanclass="helper-text"[class.visible]=" (registerForm.submitted || registerForm.controls['email']?.touched) &&
registerForm.controls['email'].invalid
"> Error el campo email es requerido
</span></div><divclass="form-control"><inputplaceholder="Password"type="password"name="password"required[(ngModel)]="register.password"/><spanclass="helper-text"[class.visible]=" (registerForm.submitted ||
registerForm.controls['password']?.touched) &&
registerForm.controls['password'].invalid
"> Error el campo password es requerido
</span></div><buttontype="submit">Register</button></form>