Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN
DE APLICACIONES WEB
Mayo 2021
PROGRAMACIÓN DE APLICACIONES WEB
CRÉDITOS
Esta es una publicación del Instituto Nacional Tecnológico - INATEC, con el apoyo
técnico financiero del gobierno de Canadá a través del organismo Children Believe
en el marco del Proyecto “Empleabilidad Juvenil: Cerrando la Brecha de Género en
la Empleabilidad Juvenil en Nicaragua”.
Los contenidos de esta cartilla son una recopilación de diversos autores. Se han
realizado todos los esfuerzos para que este material de estudio muestre información
fiable, por tanto, su contenido está en constante revisión y actualización, sin
embargo, INATEC no asumirá responsabilidad por la validación de todo el material
o por las consecuencias de su uso.
PRESENTACIÓN
La cartilla “Programación de Aplicaciones Web” está dirigida a los y las protagonistas de esta
formación con la finalidad de facilitar el proceso de aprendizaje durante su formación técnica.
El propósito de esta cartilla es dotar a los y las protagonistas de los conocimientos técnicos
fundamentales para profundizar y fortalecer las capacidades que va adquiriendo en el Centro de
Formación.
En los contenidos se presenta toda la información general, técnica y científica que necesitas conocer
para el desarrollo de las competencias. La cartilla posee figuras que facilitan su interpretación y
desarrollo.
Las palabras desconocidas o términos técnicos de uso poco común, se definen a lo largo del texto en
forma de notas al pie y se indican mediante un número.
Confiando en que logres con éxito culminar esta formación, que te convertirá en un o una profesional
en Programación de aplicaciones web y así contribuir al desarrollo de nuestro país.
TECNOLÓGICO NACIONAL
Cartilla de Programación de Aplicaciones Web
ÍNDICE
CONTENIDO I: COMPONENTES DE LA APLICACIÓN WEB.................................................................................................... 1
1.1. Características de las Tecnologías Web del lado del cliente............................................................................................................................. 1
1.2. Instalación del entorno de desarrollo....................................................................................................................................................................... 1
CONTENIDO II: DISEÑO DE INTERFAZ DE USUARIO WEB....................................................................................................5
1.1. Elementos de la aplicación......................................................................................................................................................................................... 5
1.2. Módulos............................................................................................................................................................................................................................7
1.3. Componentes................................................................................................................................................................................................................. 8
CONTENIDO III: COMUNICACIÓN ENTRE COMPONENTES................................................................................................ 12
1.1. Tuberías PiPe.................................................................................................................................................................................................................12
1.2. Modelado de datos.....................................................................................................................................................................................................12
CONTENIDO IV: ENRUTAMIENTO, PATRONES Y SERVICIOS............................................................................................. 17
1.1. Configuración de rutas...............................................................................................................................................................................................18
1.2. Patrón de diseño Inyección de dependencias.....................................................................................................................................................18
1.3. Servicios mediante inyección de dependencias.................................................................................................................................................19
CONTENIDO V: PETICIONES HTTP Y MÉTODOS................................................................................................................. 26
1.1. Instalación HttpCllient................................................................................................................................................................................................26
1.2. Operaciones con Métodos GET y POST.............................................................................................................................................................26
1.3. Operaciones con Métodos PUT, PATCH Y DELETE...........................................................................................................................................28
1.4. Gestión de respuestas y errores de peticiones HTTP......................................................................................................................................29
1.5. Intercepción de peticiones y respuestas..............................................................................................................................................................29
CONTENIDO VI: FORMULARIOS............................................................................................................................................. 33
1.1. Obtención de valores.................................................................................................................................................................................................33
1.2. Estado de los objetos ...............................................................................................................................................................................................33
1.3. Validaciones ................................................................................................................................................................................................................34
1.4. Validaciones reactivas...............................................................................................................................................................................................34
TECNOLÓGICO NACIONAL
Contenido I: Componentes de la Aplicación Web
Toda aplicación web tiene una arquitectura básica de tipo cliente-servidor, en la que sigue un modelo
de aplicación distribuida, por una parte, está el servidor que provee de recursos y servicios y por la
otra, está el cliente que los demanda. Según lo estática o dinámica que sea cada parte, se tienen
distintos tipos de aplicaciones web:
Hoy en día, la mayoría de aplicaciones web disponen de una parte cliente dinámica con el objetivo de
disminuir la comunicación con el servidor y mejorar la fluidez y experiencia del usuario.
Las tecnologías web del lado del cliente permiten crear interfaces de usuario y establecer comunicación
con el servidor basadas en HTML, CSS y JavaScript, en este caso, el navegador actúa como intérprete.
Angular es una plataforma que permite desarrollar aplicaciones web en el lado del cliente utilizando
HTML y JavaScript para que el cliente asuma la mayor parte de la lógica y descargue al servidor con
la finalidad de que las aplicaciones ejecutadas a través de Internet sean más rápidas.
Angular está orientado a objetos, trabaja con clases y favorece el uso del patrón MVC (Modelo-Vista-
Controlador).
TECNOLÓGICO NACIONAL 1
Cartilla de Programación de Aplicaciones Web
2.
2. Descargar el instalador de node: 14.16.0
(incluye npm 6.14.11)
4.
4. Una vez instalado, NPM abre una
terminal con el comando Command
y escribe:
Este comando lo que hace es instalar de forma global en el equipo Angular CLI, una herramienta de
consola de Angular que ayudará en la programación con Angular. Esta herramienta sirve para tener
una serie de comandos para poder trabajar con proyectos de Angular. Entre los comandos existe uno
que lo que hace es crear un proyecto base con todo lo necesario para empezar un proyecto con este
framework.
2 TECNOLÓGICO NACIONAL
Contenido I: Componentes de la Aplicación Web
Para usar el comando se escribe: ng new 6. Por último para ejecutar la aplicación web
6.
NOMBRE_APP (nombre de la aplicación). En que se acaba de crear ejecutamos desde la
nuestro ejemplo llamaremos “RegEstudiante”. terminal: ng serve - -open
Nos indica que si queremos realizar verificación
de tipos y paquetes en el área de trabajo, le
indicamos con “Y” que si queremos.
TECNOLÓGICO NACIONAL 3
Cartilla de Programación de Aplicaciones Web
Para el desarrollo de los ejemplos en este manual se utilizará Visual Studio Code. Por lo que se
procede a descargar e instalar.
4 TECNOLÓGICO NACIONAL
Contenido II: Diseño de Interfaz de Usuario Web
El objetivo de la interfaz web es permitir una operación y un control efectivo de la aplicación desde
la parte humana, mediante el uso de dispositivos digitales como computadoras de escritorio, laptops,
smartphones o tablets, que a su vez utilizan pantallas táctiles, teclados y botones (Lara Galicia
GoDaddy.com).
Elemento Descripción
Módulo Conjunto de códigos dedicados a resolver un objetivo que generalmente exporta
una clase. Cada aplicación posee al menos una clase de módulo que se denomina
“módulo raíz” y que, por defecto, posee el nombre de AppModule. En el mismo
podemos apreciar una clase con un decorador (@NgModule) y una serie de
propiedades entre las que destacamos las siguientes:
Metadatos Permiten decorar una clase y configurar así su comportamiento. Extiende una
función mediante otra sin tocar la original.
TECNOLÓGICO NACIONAL 5
Cartilla de Programación de Aplicaciones Web
Data binding Permite intercambiar datos entre el template y la clase del componente que
soporta la lógica del mismo. Existen 4 tipos de Data binding:
Directiva Permite añadir comportamiento dinámico a HTML mediante una etiqueta o selector.
Existen directivas estructurales (*ngFor o *ngIf) o de atributos que modican el
aspecto o comportamiento de un elemento DOM (NgSwitch, NgStyle o NgClass).
Servicio Son clases que permiten realizar acciones concretas que ponen a disposición
de cualquier componente. Por ejemplo, permiten obtener datos, resolver lógicas
especiales o realizar peticiones a un servidor.
D e p e n d e n c y Permite suministrar funcionalidades, servicios, entre otras, aun componente sin
injection que sea el propio componente el encargado de crearlos. Utiliza el decorador @
Injectable(). Generalmente proporciona servicios y facilita los test y la modularidad
del código.
6 TECNOLÓGICO NACIONAL
Contenido II: Diseño de Interfaz de Usuario Web
1.2. Módulos
Son clases que permiten organizar la aplicación encapsulando funcionalidades concretas dentro
de los mismos. Son agrupadores de componentes, pipes, directivas, entre otras, relativos a una
funcionalidad que permiten crear bloques reutilizables.
Una vez finalizada la creación del proyecto,
se abre Visual Studio Code, ir al menú File,
seleccionar Open Folder y seleccionar la
carpeta del proyecto que se ha creado, en
este caso: RegEstudiante.
TECNOLÓGICO NACIONAL 7
Cartilla de Programación de Aplicaciones Web
Básicamente, es una clase acompañada del decorador @Component y se encarga de controlar lo que
se llama Vista o zona de pantalla. A groso modo, un componente está formado por un template, una
metadata y una clase.
Al crear una aplicación con Angular CLI, se crea un módulo por defecto y, dentro del mismo, se
crea también un componente denominado app.component. El contenido por defecto del mismo es el
siguiente:
8 TECNOLÓGICO NACIONAL
Contenido II: Diseño de Interfaz de Usuario Web
Export class AppComponent, exporta la clase AppComponent que implementa la clase del
componente llamado <app-root>, definido en el archivo index.html.
El contenido del archivo app.component.html puede ser eliminado ya que solo contiene información
general del proyecto y éste fue generado automática, por lo que se procede a dejar en blanco.
Index.html: se encuentra fuera de la carpeta App, este archivo es la raíz de entrada a la aplicación.
TECNOLÓGICO NACIONAL 9
Cartilla de Programación de Aplicaciones Web
Ejemplo: Crear el componente header del proyecto, para personalizar la cabecera del html.
10 TECNOLÓGICO NACIONAL
Contenido II: Diseño de Interfaz de Usuario Web
TECNOLÓGICO NACIONAL 11
Cartilla de Programación de Aplicaciones Web
Las pipes también llamadas tuberías o filtros son funciones que se llaman en una vista (html) y que
tienen por objetivo transformar un dato a mostrar para mejorar la experiencia del usuario. Hay una
cantidad reducida de pipes que trae por defecto Angular y se puede hacer uso en cualquier vista de
los componentes.
Por ejemplo para mostrar el contenido de una variable toda en mayúsculas en la plantilla se utiliza la
siguiente sintaxis:
Seguido al nombre de la pipe se dispone cada parámetro antecedido por el carácter ':'.
PIPE
h t t p s : / / w w w.t u t o r i a l e s p r o g r a m a c i o n y a . c o m / a n g u l a r y a / d e t a l l e c o n c e p t o .
php?punto=19&codigo=19&inicio=0
Se procede a realizar el modelado de datos de la aplicación web. Para ello, se crea una Web API
que contendrá las funcionalidades de crear, reemplazar, actualizar y eliminar registros, lo que se
denomina un CRUD.
Procedimiento:
Procedimiento
1. Abrir el Visual Studio 2019, dar clic en Crear un proyecto >> Aplicación Web de ASP.Net (Modelo-
Vista-Controlador) >> Configurar proyecto >> Información adicional, después dar clic en Ok y se
presentan las plantillas disponibles, seleccionar la plantilla de Web API.
12 TECNOLÓGICO NACIONAL
Contenido III: Comunicación entre Componentes
Figura 16. Interfaz de Visual Studio 2019 Figura 17. Selección de Aplicación Web ASP.NET
Figura 18. Nombre del proyecto y ubicación Figura 19. Selección del tipo de aplicación, en este caso
Web API
Se procede agregar un nuevo elemento en el modelo de datos, haciendo clic derecho posicionado
sobre la carpeta Model >> Agregar >> Nuevo elemento >> ADO.Net Entity Data Model.
TECNOLÓGICO NACIONAL 13
Cartilla de Programación de Aplicaciones Web
14 TECNOLÓGICO NACIONAL
Contenido III: Comunicación entre Componentes
Figura 26. Se establece la conexión con la base de Figura 28. Selección de base de datos y tablas
datos
Se establece la versión del Entity Framework a
6.x
Figura 27. Se elige la versión de Entity Framework Figura 30. Agregar el controlador Web Api
TECNOLÓGICO NACIONAL 15
Cartilla de Programación de Aplicaciones Web
16 TECNOLÓGICO NACIONAL
Contenido IV: Enrutamiento, Patrones y Servicios
Toda aplicación Web se adapta a esta forma de navegación a través de algún sistema para gestionar
sus rutas (direcciones URL) y vistas asociadas (páginas HTML). En el caso de Angular, esta gestión se
hace con el servicio Angular Router.
El servicio Router no es accesible por defecto. Tiene su propio paquete sobre el cual se debe realizar
la siguiente importación en el archivo “app.module.ts”:
TECNOLÓGICO NACIONAL 17
Cartilla de Programación de Aplicaciones Web
La configuración indica qué componentes deben visualizarse por el navegador para distintos path de
ruta. Y esto es lo que realiza el servicio Router. Cuando en la barra de direcciones del navegador se
introduzca una dirección URL determinada, el servicio intentará hacer “match” de esa dirección con
los path de rutas configuradas. Si lo consigue, mostrará el componente que corresponda.
18 TECNOLÓGICO NACIONAL
Contenido IV: Enrutamiento, Patrones y Servicios
Para que este código funcione, se tiene que meter dentro del objeto Factory una anotación especial
de Angular, @Injectable():
// factory.ts
@Injectable({
providedIn: 'root',
})
export class Factory {
constructor() { }
Un servicio Angular es una clase que encapsula algún tipo de funcionalidad común entre los diferentes
componentes de la aplicación, como podría ser, por ejemplo, el acceso a datos.
La extracción de funcionalidades comunes de los componentes para crear servicios supone toda una
serie de ventajas:
a. Se evita la repetición innecesaria de código en los componentes, por lo que su código
acaba siendo más ligero y centrado en el soporte a la vista.
TECNOLÓGICO NACIONAL 19
Cartilla de Programación de Aplicaciones Web
b. Se puede crear servicios mock1 (de prueba) que faciliten el análisis de los componentes que
los usan.
c. Se mejora el control y mantenimiento de esas funcionalidades comunes.
Creación del servicio: ng generate service RegEstudiante, también se puede acotar la siguiente
orden: ng g s RegEstudiante.
Creación de la clase Estudiante: escribir todas las propiedades de la clase Estudiante relacionadas
con un estudiante que coincida con la base de datos.
Comando: ng generate class RegEstudianteClass
1 Mock: objetos simulados que imitan el comportamiento de objetos reales de forma controlada.
20 TECNOLÓGICO NACIONAL
Contenido IV: Enrutamiento, Patrones y Servicios
TECNOLÓGICO NACIONAL 21
Cartilla de Programación de Aplicaciones Web
Microsoft.AspNet.WebApi.Cors.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Cors;
namespace RegEstudiante
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Configuración y servicios de API web
EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
//var cors new EnableCorsAttribute( "*" , "*" , "*" );
config.EnableCors(cors);
22 TECNOLÓGICO NACIONAL
Contenido IV: Enrutamiento, Patrones y Servicios
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
El siguiente paso es instalar y configurar el tema Material de Angular para crear una interfaz de usuario
rica, interactiva y orientada al dispositivo para la aplicación web.
Las mujeres han ocupado y ocupan un papel vital en los avances de la tecnología y de la
computación.
Según la ONU la brecha de género en los sectores de la ciencia, la tecnología, la ingeniería y las
matemáticas (STEM) persiste desde hace años en todo el mundo. Los prejuicios y los estereotipos
de género que se arrastran desde hace mucho tiempo continúan manteniendo a las niñas y
mujeres alejadas de los campos relacionados con la ciencia. Solo un dato a tener en cuenta:
menos del 30 % de los investigadores en todo el mundo son mujeres.
Es por ello por lo que la Asamblea General de las Naciones Unidas proclamó el día 11 de febrero
como el Día Internacional de la Mujer y la Niña en la Ciencia. Un día que persigue lograr el acceso
y la participación plena y equitativa en la ciencia para las mujeres y las niñas, y además para lograr
la igualdad de género y el empoderamiento de las mujeres y las niñas.
TECNOLÓGICO NACIONAL 23
Cartilla de Programación de Aplicaciones Web
Ahora, se verán todas las bibliotecas necesarias en app.module.ts. También se importará un selector
de fecha que se usará en el selector de fecha para el campo de fecha de nacimiento.
24 TECNOLÓGICO NACIONAL
Contenido IV: Enrutamiento, Patrones y Servicios
23. AppComponent,
24. RegEstudiantecComponent],
25. imports: [
26. BrowserModule,
27. FormsModule,
28. ReactiveFormsModule,
29. HttpClientModule,
30. BrowserAnimationsModule,
31. MatButtonModule,
32. MatMenuModule,
33. MatDatepickerModule,
34. MatIconModule,
35. MatRadioModule,
36. MatCardModule,
37. MatSidenavModule,
38. MatFormFieldModule,
39. MatInputModule,
40. MatTooltipModule,
41. MatToolbarModule,
42. AppRoutingModule
43. ],
44. providers: [HttpClientModule,RegEstudianteService,MatDatepickerModule],
45. bootstrap: [AppComponent]
46. })
47. export class AppModule { }
@import '@angular/material/prebuilt-themes/indigo-pink.css';
TECNOLÓGICO NACIONAL 25
Cartilla de Programación de Aplicaciones Web
HttpClient es un servicio con métodos para realizar peticiones HTTP en aplicaciones Angular. Es
un cliente con los métodos REST habituales (a continuación), que está basado en Observables.
Básicamente es lo que se va a utilizar para hacer llamadas a una API REST y obtener resultados de la
misma.
Angular ofrece el servicio HttpClient. HttpClient es un servicio que proporciona una API simplificada,
construida sobre la interfaz XMLHttpRequest, para realizar peticiones HTTP y procesar sus respuestas.
El servicio ofrece toda una serie de métodos para realizar los distintos tipos de peticiones HTTP que
existen: get, post, put, delete, patch, head y jsonp.
Existen dos métodos con los que el navegador puede enviar información al servidor:
Antes de que el navegador envíe la información proporcionada, la codifica mediante URL encoding,
dando como resultado un Query String. Esta codificación es un esquema de keys y values separados
por un ampersand &:
key1=value1&key2=value2&key3=value3...
26 TECNOLÓGICO NACIONAL
Contenido V: Peticiones HTTP y Métodos
Los espacios y otros caracteres no alfanuméricos se sustituyen. Una vez que la información es
codificada, se envía al servidor.
Método HTTP GET
El método GET envía la información codificada del usuario en el header del HTTP request, directamente
en la URL. La página web y la información codificada se separan por un interrogante?:
www.ejemplo.com/index.htm?key1=value1&key2=value2&key3=value3...
• El método GET envía la información en la propia URL, estando limitada a 2000 caracteres.
• La información es visible por lo que con este método nunca se envía información
sensible.
• No se pueden enviar datos binarios (archivos, imágenes...).
<html>
<body>
<form action="formget.php" method="get">
Nombre: <input type="text" name="nombre"><br>
Email: <input type="text" name="email"><br>
<input type="submit" value="Enviar">
</form>
Hola <?php isset($_GET["nombre"]) ? print $_GET["nombre"] : ""; ?><br>
Tu email es: <?php isset($_GET["email"]) ? print $_GET["email"] : ""; ?>
</body>
</html>
formget.php?nombre=peter&email=peter%40ejemplo.com
Con el método HTTP POST también se codifica la información, pero ésta se envía a través del body
del HTTP Request, por lo que no aparece en la URL.
TECNOLÓGICO NACIONAL 27
Cartilla de Programación de Aplicaciones Web
HTTP define un conjunto de métodos de petición para indicar la acción que se desea realizar para
un recurso determinado. Aunque estos también pueden ser sustantivos, estos métodos de solicitud
a veces son llamados HTTP verbs. Cada uno de ellos implementan una semántica diferente, pero
algunas características similares son compartidas por un grupo de ellos.
Método
Método PUT
PUT
PHP ofrece soporte para el método PUT de HTTP utilizado por algunos clientes para almacenar
ficheros en un servidor. Las peticiones PUT son mucho más simples que una subida de ficheros
mediante peticiones POST:
Esto normalmente significaría que el cliente remoto quiere guardar el contenido que le sigue como: /
ruta/nombrefichero.html en el árbol web. Tampoco muestra ninguna información en la URL. En caso de
éxito devuelve 201 (created, en caso de que la acción haya creado un elemento) o 204 (no response,
si el servidor no devuelve ningún contenido). A diferencia de POST es idempotente2, si se crea o edita
un resource con PUT y se hace el mismo request otra vez, el resource todavía está ahí y mantiene
el mismo estado que en la primera llamada. Si con una llamada PUT se cambia aunque sea sólo un
contador en el resource, la llamada ya no es idempotente, ya que se cambian contenidos.
Método PATCH
Método PATCH
Es utilizado para aplicar modificaciones parciales a un recurso. Sólo se establecerán las propiedades
proporcionadas en el cuerpo de solicitud, las propiedades no listadas conservarán su valor existente.
Método DELETE
Método DELETE
Elimina un recurso identificado en la URI. Si se elimina correctamente devuelve el código 200 junto
con un body response, o 204 sin body. DELETE, al igual que PUT y GET, también es idempotente.
2 Idempotente: se usa para describir una operación que produce los mismos resultados si se ejecuta una o varias veces.
28 TECNOLÓGICO NACIONAL
Contenido V: Peticiones HTTP y Métodos
La función header() envía los headers (cabeceras) HTTP y asegura que estén formateados
adecuadamente. Los headers han de ser lo primero en el response (respuesta), no se ha de escribir
nada antes de un header. A veces el HTTP server puede estar configurado para incluir otros headers
además de los que se puedan especificar en el código.
Los headers contienen todo tipo de metadatos, como la codificación de texto utilizada en el mensaje
del body, o el MIME type del contenido del body. En este caso se está especificando explícitamente
los códigos de respuesta HTTP. Los códigos de respuesta estandarizan una forma de informar al
cliente acerca del resultado de su request. Por defecto, PHP devuelve un código de respuesta 200,
que significa que ha sido satisfactoria.
El servidor debe enviar el código de respuesta HTTP más apropiado. De esta forma el cliente puede
intentar reparar sus errores, suponiendo que haya alguno.
El significado de un código de respuesta HTTP no es muy preciso, por eso HTTP es considerado algo
genérico, pero se debe intentar usar el código de respuesta que más concuerde con la situación.
Angular cuenta con un mecanismo para modificar los pedidos o las respuestas hacia o desde un
servidor. Ha creado un tipo de servicio: HttpInterceptor.
Antes de realizar una petición con HttpClient Angular obtiene todos los interceptors declarados en el
módulo y ejecuta cada uno de ellos como si de un middleware3 se tratara.
3 Middleware: es un bloque de código que se ejecuta entre la petición que hace el usuario (request) hasta que la petición llega al servidor.
TECNOLÓGICO NACIONAL 29
Cartilla de Programación de Aplicaciones Web
Mediante estos interceptors se puede modificar tanto el request antes de ser enviado al servidor
como la respuesta una vez que se obtiene desde el servidor.
Ejemplo de un HttpInterceptor que agrega el host y el protocolo a todos los pedidos hechos por
HttpClient que no comiencen con http o https:
El interceptor va a verificar que la URL no comience por http o https, y en ese caso va a agregar la
variable environment.baseURL al comienzo de la url. Ahora los servicios pueden realizar pedidos sin
tener que agregar la URL completa a la API, haciendo simplemente this.http.get('/posts') el interceptor
se va a encargar de completar la URL.
30 TECNOLÓGICO NACIONAL
Contenido V: Peticiones HTTP y Métodos
En el ejemplo se observa como se captura el error de cualquier petición que se realice. Hay que tener
en cuenta que el servicio ErrorService es un servicio que debería crear el o la programadora, para
mostrar los mensajes de error http de manera uniforme en la página.
Este interceptor va a realizar el pedido tal como lo recibe ejecutando la funciona next.handler(req) y
va a continuar con un pipe que va a estar atento a cualquier error que pueda suceder con catchError
. Al recibir un error catchError va a generar un mensaje uniforme y pasarlo al servicio que muestra
errores en la página (en este caso ErrorService).
Este es un ejemplo de un módulo simple que introduce los dos interceptors que se acaban de crear:
TECNOLÓGICO NACIONAL 31
Cartilla de Programación de Aplicaciones Web
@NgModule({
declarations: [ AppComponent ],
imports: [
BrowserModule,
HttpClientModule
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: BaseURLInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: HttpErrorInterceptor, multi: true }
],
bootstrap: [AppComponent]
})
export class AppModule { }
Ambos HttpInterceptors se van a ejecutar cada vez que se intenta hacer una llamada http con HttpClient.
32 TECNOLÓGICO NACIONAL
Contenido VI: Formularios
Los formularios son uno de los elementos más importantes en las aplicaciones de gestión ya que son,
en esencia, los que permiten obtener y mostrar información para registrarla o realizar acciones a partir
de la misma. En HTML se dispone de un buen conjunto de elementos mediante los cuales se puede
fabricar formularios, entre los que se destacan los siguientes: input, select, radio button, textarea,
checkbox, buttons, entre otros.
Para acceder a los valores introducidos en los controles de un formulario, se puede utilizar diversos
mecanismos. Uno de ellos es el uso de variables locales que hagan referencia a los controles. Para
trabajar con las propiedades de un control se añade en el tag la definición #nomVar, la propiedad
name y ngModel. Por ejemplo, para un supuesto control de nominado nombre, se usaría una expresión
como la siguiente:
El estado de los objetos viene determinado por un conjunto de clases que permitirá averiguar si
los objetos de un formulario han sido tratados o modificados o sin son válidos o no respecto de sus
posibles restricciones.
Los estados más importantes de un objeto están representados por alguna de las siguientes clases:
Un objeto posee varias clases asociadas simultáneamente, aunque algunas de ellas son incompatibles
entre sí como pueden ser ng-touched con ng-untouched, ng-dirty con ng-pristine, o ng-valid con ng-
invalid.
TECNOLÓGICO NACIONAL 33
Cartilla de Programación de Aplicaciones Web
1.3. Validaciones
Las validaciones en los formularios son imprescindibles para poder recoger la información con la
calidad necesaria antes de enviarla para su procesamiento posterior. Se pueden realizar tantas
validaciones como sean necesarias en cada uno de los controles que quiera y habilitar o deshabilitar
el botón Submit del formulario dependiendo de si hay o no errores en el formulario.
Cuando necesite crear controles dinámicamente y/o se requiera realizar pruebas unitarias, se hace
uso de reactive forms.
La creación de los controles se hace en la clase del componente. Los reactive forms son síncronos,
permiten añadir controles dinámicamente y facilitan los test unitarios. En la plantilla, simplemente
se definen los tags HTML correspondientes a los inputs, pero estos quedarán relacionados con la
clase del componente gracias a formControlName y formGroupName para los controles y grupos de
controles, respectivamente.
Se diseña la página HTML del proyecto RegistroEstudiante (formulario) para la entrada y validaciones
de datos, para ello: Abrir employee.component.html y escribir el siguiente código:
<div class="container">
<mat-card>
<mat-toolbar color="accent">
<div align="center" style="color:white;text-align: right;">
Operaciones CRUD en Angular usando Web API y SQL Server
</div>
</mat-toolbar>
<br><br>
<mat-card-content>
<form [formGroup]="RegEstudianteForm"(ngSubmit)="onFormSubmit(RegEstudianteForm.
value)">
<table>
<tr>
<td class="tbl1">
<mat-form-field class="demo-full-width">
<input formControlName="NombreEstudiante" matTooltip="Introduzca
el nombre del Estudiante" matInput placeholder="Nombre Estudiante">
</mat-form-field>
<mat-error>
<span *ngIf="!RegEstudianteForm.get('NombreEstudiante').value
&& RegEstudianteForm.get('NombreEstudiante').touched"></span>
</mat-error>
</td>
<td class="tbl1">
34 TECNOLÓGICO NACIONAL
Contenido VI: Formularios
<mat-form-field class="demo-full-width">
<input matInput [matDatepicker]="picker"matTooltip="Fecha de
Nacimiento" formControlName="FechaNac"placeholder="Fecha de nacimiento">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-
toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>
<mat-error>
<span *ngIf="!RegEstudianteForm.get('FechaNac').value &&
RegEstudianteForm.get('FechaNac').touched"></span>
</mat-error>
</td>
<td class="tbl1">
<mat-form-field class="demo-full-width">
<input formControlName="Email" matTooltip="Email" matInput
placeholder="Email">
</mat-form-field>
<mat-error>
<span *ngIf="!RegEstudianteForm.get('Email').value &&
RegEstudianteForm.get('Email').touched"></span>
</mat-error>
</td>
</tr>
<tr>
<td class="tbl1">
<span>Sexo</span>
<br><br>
<mat-radio-group matTooltip="Sexo"formControlName="Sexo">
<mat-radio-button value="0">Male</mat-radio-button>
<mat-radio-button value="1">Female</mat-radio-button>
</mat-radio-group>
<mat-error>
<span *ngIf="!RegEstudianteForm.get('Sexo').value &&
RegEstudianteForm.get('Sexo').touched"></span>
</mat-error>
</td>
<td class="tbl1">
<mat-form-field class="demo-full-width">
<input matTooltip="Direccion"formControlName="Direccion"
matInput placeholder="Direccion">
</mat-form-field>
<mat-error>
<span *ngIf="!RegEstudianteForm.get('Direccion').value &&
RegEstudianteForm.get('Direccion').touched"></span>
</mat-error>
</td>
<td class="tbl1">
TECNOLÓGICO NACIONAL 35
Cartilla de Programación de Aplicaciones Web
<mat-form-field class="demo-full-width">
<input formControlName="Cedula" matTooltip="Numero de Cedula"
matInput placeholder="Cedula">
</mat-form-field>
<mat-error>
<span *ngIf="!RegEstudianteForm.get('Cedula').value &&
RegEstudianteForm.get('Cedula').touched"></span>
</mat-error>
</td>
</tr>
<tr>
<td></td>
<td class="content-center">
<button type="submit" mat-raised-button
color="accent"matTooltip="Enviar"[disabled]="!RegEstudianteForm.valid">Submit</
button>
<button type="reset" mat-raised-button color="accent"matTooltip="Reset"
(click)="resetForm()">Reset</button>
</td>
<td>
<p *ngIf="dataSaved" style="color:rgb(0, 128, 0);font-
size:20px;font-weight:bold" Class="success" align="left">
{{massage}}
</p>
</td>
</tr>
</table>
<br><br>
<table class="table" >
<tr ngclass="btn-primary">
<th class="tbl2">Nombre Estudiante</th>
<th class="tbl2">Fecha Nacimiento</th>
<th class="tbl2">Email</th>
<th class="tbl2">Sexo</th>
<th class="tbl2">Direccion</th>
<th class="tbl2">Cedula/th>
<th class="tbl2">Editar</th>
<th class="tbl2">Eliminar</th>
</tr>
<tr *ngFor="let estudiante of allRegEstudiante | async">
<td class="tbl2">{{ estudiante.NombreEstudiante}}</td>
<td class="tbl2">{{ estudiante.FechaNac | date }}</td>
<td class="tbl2">{{ estudiante.Email}}</td>
<td class="tbl2">{{estudiante.Sexo ==0? 'Hombre' : 'Mujer'}}</td>
<td class="tbl2">{{ estudiante.Direccion}}</td>
<td class="tbl2">{{ estudiante.Cedula}}</td>
<td class="tbl2">
36 TECNOLÓGICO NACIONAL
Contenido VI: Formularios
</table>
</form>
</mat-card-content>
</mat-card>
</div>
@Component({
selector: 'app-reg-estudiante-c',
templateUrl: './reg-estudiante-c.component',
styleUrls: ['./reg-estudiante-c.component.styl']
})
export class RegEstudiantecComponent implements OnInit {
dataSaved = false;
RegEstudianteForm: any;
AllRegEstudianteDetails: Observable<RegEstudianteClass[]>;
IdEstudianteUpdate = null;
massage = null;
ngOnInit() {
this.RegEstudianteForm = this.formbulider.group({
NombreEstudiante: ['', [Validators.required]],
FechaNac: ['', [Validators.required]],
Email: ['', [Validators.required]],
Sexo: ['', [Validators.required]],
Direccion: ['', [Validators.required]],
Cedula: ['', [Validators.required]],
TECNOLÓGICO NACIONAL 37
Cartilla de Programación de Aplicaciones Web
});
this.loadAllRegEstudiante();
}
loadAllRegEstudiante() {
this.allRegEstudiante = this.RegEstudianteService.getAllEstudiante();
}
onFormSubmit() {
this.dataSaved = false;
const estudiante = this.RegEstudianteForm.value;
this.CreateEstudiante(estudiante);
this.RegEstudianteForm.reset();
}
loadEstudienteToEdit(IdEstudiante: string) {
this.RegEstudianteService.getEstudianteById(IdEstudiante).subscribe(Estudiante=>
{
this.massage = null;
this.dataSaved = false;
this.IdEstudianteUpdate = Estudiante.IdEstudiante;
this.RegEstudianteForm.controls['NombreEstudiante'].setValue(Estudiante.
NombreEstudiante);
this.RegEstudianteForm.controls['FechaNac'].setValue(Estudiante.FechaNac);
this.RegEstudianteForm.controls['Email'].setValue(Estudiante.Email);
this.RegEstudianteForm.controls['Sexo'].setValue(Estudiante.Sexo);
this.RegEstudianteForm.controls['Direccion'].setValue(Estudiante.Direccion);
this.RegEstudianteForm.controls['Cedula'].setValue(Estudiante.Cedula);
});
}
CreateEstudiante(estudiante: RegEstudianteClass) {
if (this.IdEstudianteUpdate == null) {
this.RegEstudianteService.createEstudiante(estudiante).subscribe(
() => {
this.dataSaved = true;
this.massage = 'Registro guardado satisfactoriamente';
this.loadAllRegEstudiante();
this.IdEstudianteUpdate = null;
this.RegEstudianteForm.reset();
}
);
} else {
estudiante.IdEstudiante = this.IdEstudianteUpdate;
this.RegEstudianteService.updateEstudiante(estudiante).subscribe(() => {
this.dataSaved = true;
this.massage = 'Registro actualizado';
this.loadAllRegEstudiante();
this.IdEstudianteUpdate = null;
this.RegEstudianteForm.reset();
});
38 TECNOLÓGICO NACIONAL
Contenido VI: Formularios
}
}
deleteEstudiante(IdEstudiante: string) {
if (confirm("Esta segura que desea eliminar ?")) {
this.RegEstudianteService.deleteEstudianteById(IdEstudiante).subscribe(() => {
this.dataSaved = true;
this.massage = 'Registro eliminado';
this.loadAllRegEstudiante();
this.IdEstudianteUpdate = null;
this.RegEstudianteForm.reset();
});
}
}
resetForm() {
this.RegEstudianteForm.reset();
this.massage = null;
this.dataSaved = false;
}
}
Se ha completado toda la funcionalidad de código necesaria para las operaciones CRUD. Antes de
ejecutar la aplicación. Ahora, ejecutar la aplicación y ver cómo funciona.
ng serve -o
La salida se parece a la siguiente imagen. Es una interfaz de usuario impresionante creada con
operaciones CRUD.
TECNOLÓGICO NACIONAL 39
Cartilla de Programación de Aplicaciones Web
Las empresas, instituciones y organizaciones que desarrollan sus páginas o portales web con
perspectiva de género, contribuyen a la igualdad entre mujeres y hombres, a través de una
práctica activa positiva que dignifican a ambos géneros, porque: i) ofrecen una imagen igualitaria
de mujeres y hombres, evitando el androcentrismo y el sexismo; ii) Fomenta la aplicación y difusión
de las políticas de igualdad a través de Internet; iii) Evita y reduce las desigualdades de género en
el uso de Internet y los servicios que se ofrecen a través de este medio.
40 TECNOLÓGICO NACIONAL
Cartilla de Programación de Aplicaciones Web
TABLAS
Tabla 1. Elementos de la aplicación web en Angular.................5 Figura 20. Agregar nuevo elemento en el modelo de datos..13
Tabla 2. Estado de los objetos.......................................................33 Figura 21. ADO.Net Entity Data Model..........................................13
Figura 22. Contenido del modelo de datos................................14
FIGURAS Figura 23. Se elige origen de datos SQL Server........................14
Figura 24. Propiedades de conexión con la base de datos...14
Figura 1. Tipos de Aplicaciones Web............................................... 1 Figura 25. Propiedades de conexión del SQL Server..............14
Figura 2. Sitio web de Visual Studio 2019....................................2 Figura 26. Se establece la conexión con la base de datos... 15
Figura 3. Descarga e instalación de Visual Studio Community Figura 27. Se elige la versión de Entity Framework................. 15
2019..................................................................................................2 Figura 28. Selección de base de datos y tablas....................... 15
Figura 4. Descarga de Node.js........................................................2 Figura 29. Interfaz del modelo de datos..................................... 15
Figura 5. Pantalla principal de aplicación por defecto.............. 3 Figura 30. Agregar el controlador Web Api................................ 15
Figura 6. Sitio web de descarga de Visual Studio Code.......... 4 Figura 31. Web Api 2 en blanco..................................................... 16
Figura 7. Interfaz de desarrollo Visual Studio Code................... 4 Figura 32. Asignar nombre al controlador.................................. 16
Figura 8. Interfaz de usuario aplicación Registro Estudiante... 6 Figura 33. Clase ApiControler........................................................ 16
Figura 9. Figura 9. Base de datos RegEstudiante....................... 7 Figura 34. Importación de rutas en el archivo app.module.ts..17
Figura 10. Estructura del proyecto RedEstudiante en Visual Figura 35. Configuración de rutas en el archivo app-routing-
Studio Code.................................................................................... 7 module.ts....................................................................................... 18
Figura 11. Modulo: app.module.ts.....................................................8 Figura 36. Inyección de dependencia en el archivo
Figura 12. Componente principal: app.component.ts................8 regestudiante.service.ts............................................................ 19
Figura 13. Archivo index.html............................................................9 Figura 37. Generación del servicio............................................... 20
Figura 14. Archivo app.module.ts, hace referencia al Figura 38. Servicio generado, crea los archivos RegEstudiante.
componente header................................................................... 10 service.ts y RegEstudiante.service.spec.ts.......................... 20
Figura 15. Archivo app.component.html, hace referencia a Figura 39. Propiedades de la clase RegEstudianteClass...... 20
<app-header>.................................................................................11 Figura 40. Descargar el paquete Microsoft.AspNet.WebApi.
Figura 16. Interfaz de Visual Studio 2019.....................................13 Cors................................................................................................ 22
Figura 17. Selección de Aplicación Web ASP.NET......................13 Figura 41. Se registra el tema material en el archivo package.
Figura 18. Nombre del proyecto y ubicación...............................13 json..................................................................................................24
Figura 19. Selección del tipo de aplicación, en este caso Web Figura 42. Archivo app.module.ts importando
API....................................................................................................13 HttpClientModule....................................................................... 26
Figura 43. Interfaz de aplicación web CRUD............................ 39
TECNOLÓGICO NACIONAL 41
Cartilla de Programación de Aplicaciones Web
BIBLIOGRAFÍA
42 TECNOLÓGICO NACIONAL