SlideShare una empresa de Scribd logo
1 de 40
Angular
Fundamentals
Curso introducción a Angular.
Juanjo Pérez
Prerrequisitos
• Conocimientos básicos de HTML5, CSS3, JavaScript, Typescript
• Herramientas:
• NodeJS:
https://nodejs.org/es/download/ (v12.14.1)
Comprobar instalado: node –v
• Angular cli (herramienta agilizar la creación de proyectos):
npm install -g @angular/cli
• Visual Studio Code
https://code.visualstudio.com/
Plugins:
• Angular Snippets (sugiere y autocompleta elementos de angular)
• https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2
• Debugger for Chrome
• Prettier -> Code formatter (indentado, espaciado)
• TSLint -> Reglas de código (import orders, uso de comillas, tipado estricto, …)
TypeScript
• Lenguaje basado en javascript tipado que se compila a javascript
nativo.
• Ventajas
• Orientado a objetos (herencia, sobrecarga, interfaces, cast, etc…)
• Tipado estático.
• Estándar ES6
• Integrado en Angular.
• File Extensión .ts
• Documentación: https://www.typescriptlang.org/docs/home.html
Angular
• Framework frontend de Google enfocado a desarrollar apps SPA basado en HTML
y Typescript.
• Documentación: https://angular.io/docs
• Conceptos Fundamentales:
• Módulos
• Componentes
• Directivas
• Pipes
• Services & Dependency Injection
• HTTP
• Routing
• Más… Forms, Templates, Observables & RxJS, Styling, Angular Material…
SPA (Single Page Aplication)
• Web en una sola página
• Navegación entre secciones y páginas, la carga de datos se realiza de
manera dinámica, asíncronamente haciendo llamadas al servidor sin
actualizar la página en ningún momento.
• Lograr mayor fluidez posible UX
• Comunicación entre cliente y servidor se realiza de forma
transparente al usuario.
Angular características
• Cross Platform: PWA, hibryd apps, mobile, desktop
• Data-Binding:
• Vista y modelo en relación constante.
• Evita que el desarrollador esté encargado de la sincronía entre modelo y vista.
• Dependency Injection.
• Unit testing: Jasmine, karma (file extension spec.ts).
• Organización en carpetas por módulos y components.
• Angular-cli
• Navegación
Angular – Soporte y versiones
• AngularJS (1.x) – Modelo MVC
• Angular 2 – Componentes, directivas, template…
• ….
• Angular 7
• Angular 8 (node >= 12)
• Angular 9
Arquitectura
Angular-cli
• Herramienta de línea de comandos estándar para crear, depurar y publicar
aplicaciones Angular.
• Comandos más utilizados:
• Crear proyecto: ng new
• Lanzar Proyecto: ng serve (http://localhost:4200/#/)
• Compilar: ng build (ng build -c production)
• Crear componente: ng g componente nombre
• Crear directive: ng g directive nombre
• Crear pipe: ng g pipe nombre
• Crear servicio: ng g service nombre
• Crear módulo: ng g module nombre
• Lanzar unit tests: ng test
• En nuestras aplicaciones de BO antes de hacer una PR lanzamos en local:
build en modo producción, lint y unit tests.
Módulos
• Unidad lógica de organización del código
• Puedes dividir tu aplicación en tantos módulos como necesites, agrupar por funcionalidades.
• Definir los requisitos del módulo: imports, providers, declarations, exports…
• El módulo principal (root) de una aplicación angular es: app.module.ts
• Definiciones dentro del módulo:
• Declarations: componentes, directivas y pipes que pertenecen a ese modulo.
• Exports: declarations que queremos utilizar en otros módulos.
• Imports: importar los declarations de otros módulos que utilizaremos en este
módulo.
• Providers: servicios que el modulo visibiliza a sus componentes.
• Bootstrap: punto de entrada AppComponent, se define solo en el modulo principal
(app.module.ts), dónde se declara el componente principal de la aplicación
(app.component.ts)
Módulos – Ejemplo definición
Librerías
• Se instalan con npm
• Se importan con import
• Para instalar todas las librerias del proyecto:
npm install
• Se gestionan en el fichero package.json
• Dependencies vs DevDependencies
La diferencia es que DevDependencies son
librerías que solo se requieren durante el desarrollo.
En cambio las Dependencies también son requeridas
en el tiempo de ejecución.
Componentes
• Los componentes son los principales pilares de una aplicación Angular.
• Son clases que controlan el comportamiento, interacción del usuario
(eventos) y renderizado HTML.
• Puedes crear tantos componentes como necesites y reutilizarlos a lo largo
de tu aplicación.
• Cuanto más aislado y pequeño sea un componente, más fácil de reutilizar,
testear y mantener.
• Ficheros que forman parte de un componente:
• .html -> Vista, renderizado HTML
• .scss o .css -> estilos relativos exclusivamente a este componente.
• .ts -> clase con sus funcionalidades del componente.
• .spec.ts -> unit tests relativos al componente.
Componentes - Metadatos
• Atributos que indican a Angular como procesar la clase:
• selector:
empieza siempre con “app-” (estándar lint),
es el nombre que identifica al componente
como tag: <app-sample></app-sample>.
• Template (inline) o templateUrl:
dónde se define la vista del componente HTML.
• Styles (inline) o styleUrls:
dónde se definen los estilos del componente.
Componentes – Template Sintanxis
• Interpolation: incrustrando expresiones en el html
<h2>Titulo {{ 10 + 5 }} </h2> <p> {{ name }} </p>
• Assignments, new variables, increment/decrement no soportado
• El uso más común es para pintar una variable definida en el component.ts
• Property: asignar valor a una propiedad del componente
• Syntax: [property ]=“expression”
<h2 [textContent]=“name”></h2>
• textContent es una propiedad nativa de html y name es una variable declarada en la
clase
• Events:
<button (click)="deleteHero()">Delete hero</button>
<button (click)="onSave($event)">Save</button>
Componentes – Parámetro @Input
• Dentro de un componente podemos declarar propiedades de entrada
que el componente recibirá como parámetro.
• Componente:
• Uso:
Componentes – Parámetro @Output
• Dentro de un componente podemos declarar parámetros
de salida de tipo evento que el componente transmitirá al
componente padre que lo contiene.
Componentes – Parámetro @Output Ejemplo
• Componente padre:
• Componente hijo:
Componentes – Binding syntax
Hay tres modos de enlazar datos al DOM
• One way
• Property Binding []
• String interpolation {{ }}
• Eventos ()
• Two-way [()]
• Ejemplos:
<li>{{hero.name}}</li>
<input [value]=“selectedHero”></ input l>
<li (click)=“selectedHero(hero)”></li>
<input [(ngModel)]=“hero.name”>
Componentes – Binding diagram
Componentes – Binding table
Componentes – Ciclo de vida
Eventos que se disparan durante la inicialización y cierre de un componente.
• ngOnChanges: Este evento se ejecuta cada vez que se cambia un valor de un input control dentro de un
componente.
• ngOnInit: Se ejecuta una vez que Angular ha desplegado los data-bound properties(variables vinculadas a
datos) o cuando el componente ha sido inicializado.
• ngDoCheck: Se activa cada vez que se verifican las propiedades de entrada de un componente.
• ngAfterContentInit: Se ejecuta cuando Angular realiza cualquier muestra de contenido dentro de las
vistas de componentes y justo después de ngDoCheck.
• ngAfterContentChecked: Se ejecuta cada vez que el contenido del componente ha sido verificado por el
mecanismo de detección de cambios de Angular.
• ngAfterViewInit: Se ejecuta cuando la vista del componente se ha inicializado por completo.
• ngAfterViewChecked: Se ejecuta después del método ngAfterViewInit y cada vez que la vista del
componente verifique cambios.
• ngOnDestroy: Este método se ejecutará justo antes de que Angular destruya los componentes. Es muy
útil para darse de baja de los observables
Chuleta
Resumen conceptos
https://angular.io/guide/cheatsheet
Documentación
https://angular.io/docs
Directiva
Permiten añadir, manipular o eliminar elementos del DOM.
Existen dos tipos de directivas: Estructurales y de atributo.
Directivas Estructurales:
Crean o eliminan elementos del DOM.
• *ngIf: Permite mostrar / ocultar elementos del DOM.
• *ngFor: Permite ejecutar bucles sobre elementos del DOM.
Directivas Estructurales
• *ngSwitch: Permite ejecutar casos
condicionales sobre elementos del DOM.
Se pueden aplicar varias directivas de
atributo a un elemento. Sin embargo solo es
posible aplicar una directiva estructural a un
elemento.
Directivas Atributo
Directivas Atributo:
Cambian la apariencia o comportamiento de un elemento. No crean o eliminan
elementos como las Directivas estructurales.
• [ngClass]: Permite establecer una o más clases a un elemento.
Directivas Atributo
• [ngStyle]: Permite establecer una o más propiedades css a un elemento.
Directivas Atributo - Custom
Podemos crear nuestras propias directivas de atributo
personalizadas y definir el algoritmo que se debe aplicar al
elemento HTML que se le asigna.
Comando: ng generate directive [nombre de la
directiva]
• HostBinding: asignar propiedades al element html
capturado
• HostListener: capturar eventos del elemento html.
Directivas Atributo – Custom with Event
Pipes
• Una tubería (pipe) permite formatear y filtrar datos en el template.
• Utilizaremos pipe cuando necesitemos transformaciones fáciles y
muy pequeñas. Muy útiles para las fechas y las currency.
• Las pipes se pueden combinar en el mismo elemento.
Ej: {{ birthday | date | uppercase}}
• Listado de pipes nativos de Angular: https://angular.io/api?type=pipe
• Puedes crear tus propios pipes customizadas.
Pipes - Custom
Crear tu propia pipe es muy sencillo, sólo utilizando un
decorador y los metadatos: name, pure.
• pure pipe solo es llamado cuando Angular detecta un
cambio en el valor. Por defecto.
• impure pipe se llama en cada cambio que Angular detecta
en el HTML, sin importar si el valor ha cambiado o no.
* Recuerda agregar en “Declarations” de AppModule la pipe
para que sea accessible en toda la aplicación. Al igual que
para los componentes y directives.
Servicios
• Encapsulan comportamiento: cálculos,
comunicaciones (API).. lógica de
negocio.
• También pueden tener su fichero
.spec.ts para unit testing.
• Servicios de Angular: Http, Router, …
Inyección de dependencias
• Angular soporta inyección de dependencias.
• Resuelve como inyectar dependencias
usando la configuración en los “providers”.
• Se comporta como un Singleton (instancia
única) a nivel de módulo o componente
raíz.
• Un servicio registrado en el Bootstrap
estará disponible a lo largo de todo el
árbol de componentes.
Inyección de dependencias - Ejemplo
• Pasos:
1. Añadir a la clase el decorador @
Injectable
2. Añadir en el constructor de la clase
dónde quieres inyectar el servicio
3. Añadir el servicio como “provider” en el
módulo que se desee inyectar o como
root (accesible para toda la app) desde
el decorador del propio servicio.
Si este servicio no es
requerido en ningún
constructor el
compilador de Angular
lo excluirá del build para optimizer el proceso.
Client HTTP
• Angular nos ofrece un módulo para trabajar con las llamadas Http, para por ejemplo poder
comunicarse con las APIs.
• Para usarlo tenemos que:
• Importar el módulo HttpClientModule desde app.module.ts
• Importar las operaciones para Observables
Client HTTP - Ejemplo de uso en Servicio
• Haciendo uso de observables:
representa un objeto asíncrono
que permite observar los eventos
emitidos, en este caso por la
petición get.
• Con el resultado como Observable
podremos suscribirnos a este
método getMenus y se ejecutará
cuando este listo.
Client HTTP – Ejemplos
• Get con parámetros:
(url, parámetros)
• Post
Routing
• ¿Cómo navegar entre páginas?
Angular nos provee de un mecanismo (Router) para navegar
dentro de la aplicación (SPA) reescribiendo la URL en el
navegador.
• En el archivo app.routing.ts se define una tabla de rutas a
componentes para resolver que componente debe mostrarse
al navegar a esa ruta:
• Path: el nombre que le damos a la url
• Component: el componente que cargará cuando naveguemos a esa
url
• Por defecto angular-cli ya realiza la configuración
automáticamente (import modulo router, <router-outlet> en
app.component.html…)
Routing - Reglas
• El orden importa
• No se pone ‘/’ al comienzo de la ruta
• ‘’ = ruta por defecto
• /**/ = cualquier otra ruta
• Se permiten parámetros en la ruta
• Si la aplicación esta compuesta por diversos módulos, cda modulo debe gestionar sus propias
rutas como “sub-rutas”.
La única diferencia con respecto al root
Gracias!
Esto no acaba aquí…
Forms, Templates, Observables & RxJS, Styling,
Routing, Angular Material, …

Más contenido relacionado

La actualidad más candente

NestJS - O framework progressivo
NestJS - O framework progressivoNestJS - O framework progressivo
NestJS - O framework progressivoWender Machado
 
Introdução ao Spring Framework MVC
Introdução ao Spring Framework MVCIntrodução ao Spring Framework MVC
Introdução ao Spring Framework MVCMessias Batista
 
Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScriptAhmed El-Kady
 
Building blocks of Angular
Building blocks of AngularBuilding blocks of Angular
Building blocks of AngularKnoldus Inc.
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to SwaggerKnoldus Inc.
 
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfKnoldus Inc.
 
Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015johannes_fiala
 
AngularJS - Services
AngularJS - ServicesAngularJS - Services
AngularJS - ServicesNir Kaufman
 
Api gateway
Api gatewayApi gateway
Api gatewayenyert
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass SlidesNir Kaufman
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014JWORKS powered by Ordina
 
Typescript in 30mins
Typescript in 30mins Typescript in 30mins
Typescript in 30mins Udaya Kumar
 
Angular components
Angular componentsAngular components
Angular componentsSultan Ahmed
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET CoreAvanade Nederland
 

La actualidad más candente (20)

Angular
AngularAngular
Angular
 
Apresentação angular js
Apresentação angular jsApresentação angular js
Apresentação angular js
 
NestJS - O framework progressivo
NestJS - O framework progressivoNestJS - O framework progressivo
NestJS - O framework progressivo
 
Introdução ao Spring Framework MVC
Introdução ao Spring Framework MVCIntrodução ao Spring Framework MVC
Introdução ao Spring Framework MVC
 
AngularJS
AngularJSAngularJS
AngularJS
 
Angular 4 and TypeScript
Angular 4 and TypeScriptAngular 4 and TypeScript
Angular 4 and TypeScript
 
Building blocks of Angular
Building blocks of AngularBuilding blocks of Angular
Building blocks of Angular
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to Swagger
 
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdf
 
Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015Document your rest api using swagger - Devoxx 2015
Document your rest api using swagger - Devoxx 2015
 
AngularJS - Services
AngularJS - ServicesAngularJS - Services
AngularJS - Services
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
API
APIAPI
API
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
 
02 api gateway
02 api gateway02 api gateway
02 api gateway
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
 
Typescript in 30mins
Typescript in 30mins Typescript in 30mins
Typescript in 30mins
 
Angular components
Angular componentsAngular components
Angular components
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
 

Similar a Angular Fundamentals

Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Luis Fernando Aguas Bucheli
 
003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdfDubiWeb.TK
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxLuis Fernando Aguas Bucheli
 
Sp fx connecting to share point & react lifecycle
Sp fx connecting to share point & react lifecycleSp fx connecting to share point & react lifecycle
Sp fx connecting to share point & react lifecycleMario Cortés Flores
 
Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJSOscar Gensollen
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Ignacio Muñoz Vicente
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptxSibilinoAndante
 

Similar a Angular Fundamentals (20)

Angular js
Angular jsAngular js
Angular js
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Servidores.pptx
Servidores.pptxServidores.pptx
Servidores.pptx
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf003-Introduccion-Angular.pdf
003-Introduccion-Angular.pdf
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
2018.sps madrid.spfx workshop
2018.sps madrid.spfx workshop2018.sps madrid.spfx workshop
2018.sps madrid.spfx workshop
 
Sp fx connecting to share point & react lifecycle
Sp fx connecting to share point & react lifecycleSp fx connecting to share point & react lifecycle
Sp fx connecting to share point & react lifecycle
 
Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJS
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2
 
Angular js in mobile
Angular js in mobileAngular js in mobile
Angular js in mobile
 
Herramientas Digitales
Herramientas DigitalesHerramientas Digitales
Herramientas Digitales
 
S4 - EF
S4 - EFS4 - EF
S4 - EF
 
Introducción a Angular 6
Introducción a Angular 6Introducción a Angular 6
Introducción a Angular 6
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
 

Angular Fundamentals

  • 2. Prerrequisitos • Conocimientos básicos de HTML5, CSS3, JavaScript, Typescript • Herramientas: • NodeJS: https://nodejs.org/es/download/ (v12.14.1) Comprobar instalado: node –v • Angular cli (herramienta agilizar la creación de proyectos): npm install -g @angular/cli • Visual Studio Code https://code.visualstudio.com/ Plugins: • Angular Snippets (sugiere y autocompleta elementos de angular) • https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2 • Debugger for Chrome • Prettier -> Code formatter (indentado, espaciado) • TSLint -> Reglas de código (import orders, uso de comillas, tipado estricto, …)
  • 3. TypeScript • Lenguaje basado en javascript tipado que se compila a javascript nativo. • Ventajas • Orientado a objetos (herencia, sobrecarga, interfaces, cast, etc…) • Tipado estático. • Estándar ES6 • Integrado en Angular. • File Extensión .ts • Documentación: https://www.typescriptlang.org/docs/home.html
  • 4. Angular • Framework frontend de Google enfocado a desarrollar apps SPA basado en HTML y Typescript. • Documentación: https://angular.io/docs • Conceptos Fundamentales: • Módulos • Componentes • Directivas • Pipes • Services & Dependency Injection • HTTP • Routing • Más… Forms, Templates, Observables & RxJS, Styling, Angular Material…
  • 5. SPA (Single Page Aplication) • Web en una sola página • Navegación entre secciones y páginas, la carga de datos se realiza de manera dinámica, asíncronamente haciendo llamadas al servidor sin actualizar la página en ningún momento. • Lograr mayor fluidez posible UX • Comunicación entre cliente y servidor se realiza de forma transparente al usuario.
  • 6. Angular características • Cross Platform: PWA, hibryd apps, mobile, desktop • Data-Binding: • Vista y modelo en relación constante. • Evita que el desarrollador esté encargado de la sincronía entre modelo y vista. • Dependency Injection. • Unit testing: Jasmine, karma (file extension spec.ts). • Organización en carpetas por módulos y components. • Angular-cli • Navegación
  • 7. Angular – Soporte y versiones • AngularJS (1.x) – Modelo MVC • Angular 2 – Componentes, directivas, template… • …. • Angular 7 • Angular 8 (node >= 12) • Angular 9
  • 9. Angular-cli • Herramienta de línea de comandos estándar para crear, depurar y publicar aplicaciones Angular. • Comandos más utilizados: • Crear proyecto: ng new • Lanzar Proyecto: ng serve (http://localhost:4200/#/) • Compilar: ng build (ng build -c production) • Crear componente: ng g componente nombre • Crear directive: ng g directive nombre • Crear pipe: ng g pipe nombre • Crear servicio: ng g service nombre • Crear módulo: ng g module nombre • Lanzar unit tests: ng test • En nuestras aplicaciones de BO antes de hacer una PR lanzamos en local: build en modo producción, lint y unit tests.
  • 10. Módulos • Unidad lógica de organización del código • Puedes dividir tu aplicación en tantos módulos como necesites, agrupar por funcionalidades. • Definir los requisitos del módulo: imports, providers, declarations, exports… • El módulo principal (root) de una aplicación angular es: app.module.ts • Definiciones dentro del módulo: • Declarations: componentes, directivas y pipes que pertenecen a ese modulo. • Exports: declarations que queremos utilizar en otros módulos. • Imports: importar los declarations de otros módulos que utilizaremos en este módulo. • Providers: servicios que el modulo visibiliza a sus componentes. • Bootstrap: punto de entrada AppComponent, se define solo en el modulo principal (app.module.ts), dónde se declara el componente principal de la aplicación (app.component.ts)
  • 11. Módulos – Ejemplo definición
  • 12. Librerías • Se instalan con npm • Se importan con import • Para instalar todas las librerias del proyecto: npm install • Se gestionan en el fichero package.json • Dependencies vs DevDependencies La diferencia es que DevDependencies son librerías que solo se requieren durante el desarrollo. En cambio las Dependencies también son requeridas en el tiempo de ejecución.
  • 13. Componentes • Los componentes son los principales pilares de una aplicación Angular. • Son clases que controlan el comportamiento, interacción del usuario (eventos) y renderizado HTML. • Puedes crear tantos componentes como necesites y reutilizarlos a lo largo de tu aplicación. • Cuanto más aislado y pequeño sea un componente, más fácil de reutilizar, testear y mantener. • Ficheros que forman parte de un componente: • .html -> Vista, renderizado HTML • .scss o .css -> estilos relativos exclusivamente a este componente. • .ts -> clase con sus funcionalidades del componente. • .spec.ts -> unit tests relativos al componente.
  • 14. Componentes - Metadatos • Atributos que indican a Angular como procesar la clase: • selector: empieza siempre con “app-” (estándar lint), es el nombre que identifica al componente como tag: <app-sample></app-sample>. • Template (inline) o templateUrl: dónde se define la vista del componente HTML. • Styles (inline) o styleUrls: dónde se definen los estilos del componente.
  • 15. Componentes – Template Sintanxis • Interpolation: incrustrando expresiones en el html <h2>Titulo {{ 10 + 5 }} </h2> <p> {{ name }} </p> • Assignments, new variables, increment/decrement no soportado • El uso más común es para pintar una variable definida en el component.ts • Property: asignar valor a una propiedad del componente • Syntax: [property ]=“expression” <h2 [textContent]=“name”></h2> • textContent es una propiedad nativa de html y name es una variable declarada en la clase • Events: <button (click)="deleteHero()">Delete hero</button> <button (click)="onSave($event)">Save</button>
  • 16. Componentes – Parámetro @Input • Dentro de un componente podemos declarar propiedades de entrada que el componente recibirá como parámetro. • Componente: • Uso:
  • 17. Componentes – Parámetro @Output • Dentro de un componente podemos declarar parámetros de salida de tipo evento que el componente transmitirá al componente padre que lo contiene.
  • 18. Componentes – Parámetro @Output Ejemplo • Componente padre: • Componente hijo:
  • 19. Componentes – Binding syntax Hay tres modos de enlazar datos al DOM • One way • Property Binding [] • String interpolation {{ }} • Eventos () • Two-way [()] • Ejemplos: <li>{{hero.name}}</li> <input [value]=“selectedHero”></ input l> <li (click)=“selectedHero(hero)”></li> <input [(ngModel)]=“hero.name”>
  • 22. Componentes – Ciclo de vida Eventos que se disparan durante la inicialización y cierre de un componente. • ngOnChanges: Este evento se ejecuta cada vez que se cambia un valor de un input control dentro de un componente. • ngOnInit: Se ejecuta una vez que Angular ha desplegado los data-bound properties(variables vinculadas a datos) o cuando el componente ha sido inicializado. • ngDoCheck: Se activa cada vez que se verifican las propiedades de entrada de un componente. • ngAfterContentInit: Se ejecuta cuando Angular realiza cualquier muestra de contenido dentro de las vistas de componentes y justo después de ngDoCheck. • ngAfterContentChecked: Se ejecuta cada vez que el contenido del componente ha sido verificado por el mecanismo de detección de cambios de Angular. • ngAfterViewInit: Se ejecuta cuando la vista del componente se ha inicializado por completo. • ngAfterViewChecked: Se ejecuta después del método ngAfterViewInit y cada vez que la vista del componente verifique cambios. • ngOnDestroy: Este método se ejecutará justo antes de que Angular destruya los componentes. Es muy útil para darse de baja de los observables
  • 24. Directiva Permiten añadir, manipular o eliminar elementos del DOM. Existen dos tipos de directivas: Estructurales y de atributo. Directivas Estructurales: Crean o eliminan elementos del DOM. • *ngIf: Permite mostrar / ocultar elementos del DOM. • *ngFor: Permite ejecutar bucles sobre elementos del DOM.
  • 25. Directivas Estructurales • *ngSwitch: Permite ejecutar casos condicionales sobre elementos del DOM. Se pueden aplicar varias directivas de atributo a un elemento. Sin embargo solo es posible aplicar una directiva estructural a un elemento.
  • 26. Directivas Atributo Directivas Atributo: Cambian la apariencia o comportamiento de un elemento. No crean o eliminan elementos como las Directivas estructurales. • [ngClass]: Permite establecer una o más clases a un elemento.
  • 27. Directivas Atributo • [ngStyle]: Permite establecer una o más propiedades css a un elemento.
  • 28. Directivas Atributo - Custom Podemos crear nuestras propias directivas de atributo personalizadas y definir el algoritmo que se debe aplicar al elemento HTML que se le asigna. Comando: ng generate directive [nombre de la directiva] • HostBinding: asignar propiedades al element html capturado • HostListener: capturar eventos del elemento html.
  • 29. Directivas Atributo – Custom with Event
  • 30. Pipes • Una tubería (pipe) permite formatear y filtrar datos en el template. • Utilizaremos pipe cuando necesitemos transformaciones fáciles y muy pequeñas. Muy útiles para las fechas y las currency. • Las pipes se pueden combinar en el mismo elemento. Ej: {{ birthday | date | uppercase}} • Listado de pipes nativos de Angular: https://angular.io/api?type=pipe • Puedes crear tus propios pipes customizadas.
  • 31. Pipes - Custom Crear tu propia pipe es muy sencillo, sólo utilizando un decorador y los metadatos: name, pure. • pure pipe solo es llamado cuando Angular detecta un cambio en el valor. Por defecto. • impure pipe se llama en cada cambio que Angular detecta en el HTML, sin importar si el valor ha cambiado o no. * Recuerda agregar en “Declarations” de AppModule la pipe para que sea accessible en toda la aplicación. Al igual que para los componentes y directives.
  • 32. Servicios • Encapsulan comportamiento: cálculos, comunicaciones (API).. lógica de negocio. • También pueden tener su fichero .spec.ts para unit testing. • Servicios de Angular: Http, Router, …
  • 33. Inyección de dependencias • Angular soporta inyección de dependencias. • Resuelve como inyectar dependencias usando la configuración en los “providers”. • Se comporta como un Singleton (instancia única) a nivel de módulo o componente raíz. • Un servicio registrado en el Bootstrap estará disponible a lo largo de todo el árbol de componentes.
  • 34. Inyección de dependencias - Ejemplo • Pasos: 1. Añadir a la clase el decorador @ Injectable 2. Añadir en el constructor de la clase dónde quieres inyectar el servicio 3. Añadir el servicio como “provider” en el módulo que se desee inyectar o como root (accesible para toda la app) desde el decorador del propio servicio. Si este servicio no es requerido en ningún constructor el compilador de Angular lo excluirá del build para optimizer el proceso.
  • 35. Client HTTP • Angular nos ofrece un módulo para trabajar con las llamadas Http, para por ejemplo poder comunicarse con las APIs. • Para usarlo tenemos que: • Importar el módulo HttpClientModule desde app.module.ts • Importar las operaciones para Observables
  • 36. Client HTTP - Ejemplo de uso en Servicio • Haciendo uso de observables: representa un objeto asíncrono que permite observar los eventos emitidos, en este caso por la petición get. • Con el resultado como Observable podremos suscribirnos a este método getMenus y se ejecutará cuando este listo.
  • 37. Client HTTP – Ejemplos • Get con parámetros: (url, parámetros) • Post
  • 38. Routing • ¿Cómo navegar entre páginas? Angular nos provee de un mecanismo (Router) para navegar dentro de la aplicación (SPA) reescribiendo la URL en el navegador. • En el archivo app.routing.ts se define una tabla de rutas a componentes para resolver que componente debe mostrarse al navegar a esa ruta: • Path: el nombre que le damos a la url • Component: el componente que cargará cuando naveguemos a esa url • Por defecto angular-cli ya realiza la configuración automáticamente (import modulo router, <router-outlet> en app.component.html…)
  • 39. Routing - Reglas • El orden importa • No se pone ‘/’ al comienzo de la ruta • ‘’ = ruta por defecto • /**/ = cualquier otra ruta • Se permiten parámetros en la ruta • Si la aplicación esta compuesta por diversos módulos, cda modulo debe gestionar sus propias rutas como “sub-rutas”. La única diferencia con respecto al root
  • 40. Gracias! Esto no acaba aquí… Forms, Templates, Observables & RxJS, Styling, Routing, Angular Material, …