Introducción a Angular

Pedro J. Molina
Pedro J. MolinaFounder at Metadev en Metadev
Introducción a Angular
Dr. Pedro J. Molina
http://pjmolina.com
@pmolinam
Agenda
Origen
Soporte en navegadores
Conceptos y arquitectura
angular-cli
Módulos, Componentes
Servicios, Directivas
Navegación
Web Components
Prerrequisitos
 NodeJS
 https://nodejs.org
 Editor de textos: tu editor favorito (con soporte a TS)
 VS Code https://code.visualstudio.com
 Atom https://atom.io
 SublimeText 3 https://www.sublimetext.com/3
 WebStorm https://www.jetbrains.com/webstorm/
 Chrome Web Browser p.e. (cualquier evergreen browser nos sirve)
 Git
Angular 2
 Framework para capa cliente
 Impulsado por Google
 Diseñado para móvil primero, desktop después
 AngularJS v. 1.0 tuvo una gran cuota de mercado. Ng2 reescrito desde
cero.
 Abraza TypeScript como su principal lenguaje recomendado
Soporte en navegadores
Desktop Móvil
Ng2 Breve Historia
 Ng1 2009
 Ng2 Alfa, Abril 2015
 AtScript
 TypeScript (acuerdo con Microsoft)
 Entrada y Salida Rob Eisenberg @eisenbergEffect
 Versiones rc.* (~)
 Versión final 2.0 14 Septiembre, 2016
 Versión actual 2.4.4
 En preparación 4.x (Compatible con Ng2)
¿¡Typescript!?
Arquitectura
Organización de ficheros y carpetas
 Nombrado de ficheros
 PascalCase
 camelCase
 snake_case
 kebab-case
 Organización en carpetas por módulos y componentes
Prerrequisitos
 NodeJS v. 4.x o superior
 NPM v. 3.x.x o superior
node -v
npm -v
npm i –g npm
Angular-cli
Herramienta de línea de comando para agilizar la
creación de proyectos NG2
Generador de código sencillo semilla (scaffolding) tipo
Ruby On Rails
https://cli.angular.io
npm i –g angular-cli
Angular-cli
Creada por el equipo de NG2
Sigue las buenas practicas recomendadas por el
equipo
Referencia de comandos:
https://cli.angular.io/reference.pdf
Angular-cli. Comandos
ng newCrear proyecto
Generar
Lanzar en desarrollo
Construir
ng generate <name>
ng serve
ng build
ng-cli con preprocesadores de CSS
Soportados:
Sass/scss
Less
Stylus
https://github.com/angular/angular-cli#css-preprocessor-integration
ng new app0 --style=sass
Angular-cli. Comandos de generación
ng g component <nombre>
ng g directive <nombre>
ng g pipe <nombre>
ng g service <nombre>
ng g class <nombre>
ng g interface <nombre>
ng g enum <nombre>
ng g module <nombre>
Nuevo:
Componente
Directiva
Tubería
Servicio
Clase
Interfaz
Enumerado
Modulo
Angular-cli. Comandos deTest
ng testLanzar Tests de Unidad
Lanzar Tests Extremo a Extremo ng e2e
Módulos
 Unidad lógica de organización de código en AngularJS2
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
@NgModule({
imports: [ BrowserModule ],
providers: [ Logger ],
declarations: [ AppComponent ],
exports: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Bootstraping
 Punto de entrada y arranque
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
Librerías AngularJS2
 Se instalan con npm
 Se importan con import
import { Component } from ‘@angular/core';
Componentes
 Clases que controlan el comportamiento, interacción con el usuario y
pintado de controles
@Component(…)
export class HeroListComponent implements OnInit {
heroes: Hero[];
selectedHero: Hero;
constructor(private service: HeroService) { }
ngOnInit() {
this.heroes = this.service.getHeroes();
}
selectHero(hero: Hero) { this.selectedHero = hero; }
}
Propiedades
 Propiedades de un control visibles desde el exterior
export class UserComponent {
@Input() name: string;
@Input() surname: string;
}
<my-user name="Jesica" surname="Alba">
</my-user>
Eventos
 Eventos públicos del componente
export class UserComponent {
@Output() selected = new EventEmitter();
…
this.selected.emit(params);
}
<my-user name="Jesica" (selected)="onSelected()">
</my-user>
Ciclo de vida del componente
 Eventos que se disparan durante la inicialización y cierre de un
componente.
 https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html
Plantillas
 HTML con extensiones de plantillas para NG2
<h2>Hero List</h2>
<p><i>Pick a hero from the list</i></p>
<ul>
<li *ngFor="let h of heroes" (click)="selectHero(h)">
{{h.name}}
</li>
</ul>
<hero-detail *ngIf="selectedHero" [hero]="selectedHero">
</hero-detail>
Metadatos
 Los metadatos son atributos (datos) que indican a NG2 como
procesar cada clase.
@Component({
moduleId: module.id,
selector: 'hero-list',
templateUrl: ‘./hero-list.component.html',
providers: [ HeroService ]
})
export class HeroListComponent implements OnInit {
/* . . . */
}
Enlace de datos
 Hay tres modos de enlazar datos al DOM
 One way [] o {{}}
 Eventos ()
 Two-way [()] Banana en la caja
<li>{{hero.name}}</li>
<hero-detail [hero]="selectedHero"></hero-
detail>
<li (click)="selectHero(hero)"></li>
<input [(ngModel)]="hero.name">
Enlace de datos
Introducción a Angular
Directivas
 Permiten extender el comportamiento de los componentes Angular a
nivel de estructural y de atributo.
 Estructurales:
 Atributo:
*ngFor *ngIf
<input [(ngModel)]="hero.name">
Servicios
 Encapsulan comportamiento: calculo, comunicaciones (generalmente
sin interacción de UI) (lógica de negocio).
 Se implementan con clases
export class Logger {
log(msg: any) { console.log(msg); }
error(msg: any) { console.error(msg); }
warn(msg: any) { console.warn(msg); }
}
export class HeroComponent {
constructor(private logger: Logger) { }
}
Inyección de Dependencias
 Patrón de arquitectura que permite flexibilizar el reemplazo de
servicios en diferentes contextos (p.e. producción vs test)
@Injectable()
export class Logger {
log(msg: any) { console.log(msg); }
error(msg: any) { console.error(msg); }
warn(msg: any) { console.warn(msg); }
}
export class HeroComponent {
constructor(private logger: Logger) { }
}
Inyección de Dependencias
 NG2 resuelve como inyectar dependencias usado la configuración de
proveedores.
providers: [ BackendService, HeroService, Logger ]
Inyección de Dependencias
 El alcance de un servicio depende de donde se registra.
 Se comportan como singleton (instancia única) a nivel de módulo o
componente raiz.
 Se comportan como múltiples instancias si se registran a nivel de
componente (cada nuevo componente recibe una nueva copia
inyectada del servicio).
Sintaxis de plantillas
 Interpolación
 Calculo de cadenas en HTML y valores de atributos.
<p>My current hero is {{currentHero.firstName}}</p>
<h3>
{{title}}
<img src="{{heroImageUrl}}" style="height:30px">
</h3>
Expresiones en plantillas
 Solo pueden referencias propiedades del componente.
 Sin ámbito global. Sin acceso a window
 Recomendaciones para expresiones:
 Sin efectos secundarios (no side effects)
 Ejecución rápida
 Simplicidad
 Idempotencia
<p>Longitud: {{2 * pi * radio}}</p>
Chuleta de trucos / Cheatsheet
Para tener a mano y actualizada:
https://angular.io/docs/ts/latest/guide/cheatsheet.html
Guía de Estilo NG2
Guía de estilo. Nombrado y estilo de código
https://angular.io/docs/ts/latest/guide/style-guide.html
Tuberías / Pipes
 Una tubería permite formatear y filtrar datos.
 Se pueden componer. En Ng1 se llamaban filtros.
Ejemplo de uso:
import { Component } from '@angular/core';
@Component({
selector: 'hero-birthday',
template: `<p>Born date: {{ d1 | date:shortDate }}</p>`
})
export class HeroBirthdayComponent {
d1 = new Date(1988, 3, 15); // April 15, 1988
}
Tuberías / Pipes
Ejemplo de implementación:
import { Pipe, PipeTransform } from '@angular/core';
/* Raise the value exponentially
* Takes an exponent argument that defaults to 1.
* Example: {{ 2 | exponentialStrength:10}} */
@Pipe({name: 'exponentialStrength'})
export class ExponentialStrengthPipe implements PipeTransform {
transform(value: number, exponent: string): number {
let exp = parseFloat(exponent);
return Math.pow(value, isNaN(exp) ? 1 : exp);
}
}
Tuberías / Pipes
Ejemplo de uso como filtro de una colección:
<div *ngFor="let hero of (heroes | flyingHeroes)">
{{hero.name}}
</div>
import { Pipe, PipeTransform } from '@angular/core';
import { Hero } from './heroes';
@Pipe({ name: 'flyingHeroes' })
export class FlyingHeroesPipe implements PipeTransform {
transform(allHeroes: Hero[]): Hero[] {
return allHeroes.filter(hero => hero.canFly);
}
}
Directivas Estructural *ngIf
Permite añadir contenido de forma condicional
<div *ngIf="condicion">
{{contenido}}
</div>
<div *ngIf="obj">
<p>{{obj.name}}</p>
</div>
Directivas Estructural *ngFor
Permite iterar una colección insertando contenido
para cada elemento
<div *ngFor=“let hero of heroes">
{{hero.name}} {{hero.lastname}}
</div>
Cliente HTTP
Nos permite salir del browser a la peligrosa Internet
Para usarlo tenemos que:
Importar el módulo HttpModule desde @angular/http
Importar las operaciones para Observables (dependencia)
import 'rxjs/operator';
Cliente HTTP. Ejemplo de uso en Servicio
Versión con Observables
import { Http, Headers, Response } from ‘@angular/http’;
…
constructor(private http: Http) {}
…
getCountries(): Observable<Country[]> {
return this.http.get(this.serviceUrl)
.map(this.extractData)
.catch(this.handleError);
}
Cliente HTTP. Ejemplo de uso en Servicio
Versión con Promesas
import { Http, Headers, Response } from ‘@angular/http’;
…
constructor(private http: Http) {}
…
getCountries (): Promise<Country[]> {
return this.http.get(this.serviceUrl)
.map(this.extractData)
.catch(this.handleError)
.toPromise();
Navegación / Router
¿Cómo navegar entre paginas?
El router proporciona mecanismo para navegar dentro de
la aplicación (SPA) reescribiendo la URL en el navegador
Es una de las piezas que mas cambios (roturas de
compatibilidad) ha tenido durante las betas y versiones RC
Ya está estabilizada, afortunadamente.
Navegación / Router
Index.html añadir
<head>
…
<base href="/">
…
</head>
Navegación / Router
app.routing.ts
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
const routes: Routes = [
{ path: 'home', component: HomeComponent },
{ path: 'about', component: AboutComponent},
{ path: ‘city/:id', component: CityDetailComponent},
];
export const routing = RouterModule.forRoot(routes);
Navegación / Router
El Router es una tabla de rutas que mapea rutas a
componentes para resolver que componente debe
mostrarse al navegar a esa ruta.
El orden importa (precedencia de rutas) first-match-wins
No se pone ‘/’ al comienzo de ruta
‘’ = ruta por defecto
‘**’ = cualquier otra ruta
Se permiten parámetros en la ruta
Navegación / Router
Añadiendo la definición de rutas en el Module.ts
import { routing } from './app.routing';
…
@NgModule({
imports: [routing, …
Navegación / Router
app.component.html
<header>
<nav>
<a [routerLink]="['home']">Inicio</a>
<a [routerLink]="['about']">Acerca de…</a>
<a [routerLink]="['city/AGP']">Málaga</a>
<a [routerLink]="['city/SVQ']">Sevilla</a>
</nav>
</header>
<main>
<router-outlet></router-outlet>
</main>
Navegación / Router
Composición de rutas
Si la aplicación esta compuesta por diversos módulos,
cada modulo puede (y debe) gestionar sus rutas como
“sub-rutas”
Única diferencia, el registro:
export const routing = RouterModule.forRoot(routes);
export const citiesRoutes = RouterModule.forChild(routes);
WebComponents
La “moda”/estandar a punto de llegar
Recomendación de la W3C.
Polymer (impulsor)
Establece de modo estándar unas APIs mínimas para
permitir componentes en los navegadores.
Intro a Webcomponents.
https://component.kitchen/tutorial
WebComponents
Tecnologías subyacentes
1. Custom HTML Elements
2. HTML Templates
3. Shadow DOM DOM into DOM
4. HTML Imports
<link rel="import" href="my-element/my-element.html">
<my-tag> </my-tag>
<template>…
WebComponents
Con la popularalización de WebComponents
veremos:
Portales compuestos por componentes hechos con
diversas tecnologías como:
Polymer, AngularJS2, React, AngularJS1, Aurelia, jQuery,
…
Los componentes se comunican con el resto vía eventos y
propiedades (con o sin data-binding)
Desarrollo de aplicaciones móviles con Angular
Ionic2
 Angular2 + Cordova = Ionic2 http://ionic.io/2
Referencias
 AngularJS 2 https://angular.io
 Tutorial https://angular.io/docs/ts/latest/tutorial
 Angular-CLI https://cli.angular.io
 Plantilla con webpack https://github.com/preboot/angular2-
webpack
 Ejemplo https://github.com/pjmolina/lemoncity-ng2
¡Gracias!
http://pjmolina.com
@pmolinam
1 de 58

Recomendados

Angular Conceptos Practicos 1 por
Angular Conceptos Practicos 1Angular Conceptos Practicos 1
Angular Conceptos Practicos 1Sergio Castillo Yrizales
1.9K vistas57 diapositivas
Webinar: Introducción a Angular por
Webinar: Introducción a AngularWebinar: Introducción a Angular
Webinar: Introducción a AngularArsys
239 vistas14 diapositivas
Building blocks of Angular por
Building blocks of AngularBuilding blocks of Angular
Building blocks of AngularKnoldus Inc.
556 vistas21 diapositivas
Polimorfismo ppt por
Polimorfismo  pptPolimorfismo  ppt
Polimorfismo pptivanvillar7
4.5K vistas15 diapositivas
Arquitetura limpa por
Arquitetura limpaArquitetura limpa
Arquitetura limpaJames G Silva
3.1K vistas15 diapositivas
Angular 2.0 forms por
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 formsEyal Vardi
3.4K vistas38 diapositivas

Más contenido relacionado

La actualidad más candente

Semana 3 Herencia en Java por
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en JavaRichard Eliseo Mendoza Gafaro
1.7K vistas30 diapositivas
Java 8-streams-collectors-patterns por
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
31.1K vistas451 diapositivas
Angular js por
Angular jsAngular js
Angular jsJoan Pablo
1.1K vistas34 diapositivas
Formation jpa-hibernate-spring-data por
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
332 vistas41 diapositivas
Do while, for y foreach por
Do while, for y foreachDo while, for y foreach
Do while, for y foreachRogDer
8.9K vistas16 diapositivas
Clean Architecture em PHP por
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHPElton Minetto
3.3K vistas34 diapositivas

La actualidad más candente(20)

Java 8-streams-collectors-patterns por José Paumard
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
José Paumard31.1K vistas
Angular js por Joan Pablo
Angular jsAngular js
Angular js
Joan Pablo1.1K vistas
Do while, for y foreach por RogDer
Do while, for y foreachDo while, for y foreach
Do while, for y foreach
RogDer8.9K vistas
Clean Architecture em PHP por Elton Minetto
Clean Architecture em PHPClean Architecture em PHP
Clean Architecture em PHP
Elton Minetto3.3K vistas
An introduction to maven gradle and sbt por Fabio Fumarola
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
Fabio Fumarola8.2K vistas
Angular data binding por Sultan Ahmed
Angular data binding Angular data binding
Angular data binding
Sultan Ahmed139 vistas
Angular directives and pipes por Knoldus Inc.
Angular directives and pipesAngular directives and pipes
Angular directives and pipes
Knoldus Inc.397 vistas
42 preguntas que deberias hacerte antes de abordar un proyecto por Blogdelfreelance .com
42 preguntas que deberias hacerte antes de abordar un proyecto42 preguntas que deberias hacerte antes de abordar un proyecto
42 preguntas que deberias hacerte antes de abordar un proyecto
Blogdelfreelance .com66.8K vistas
Requerimientos Funcionales y no Funcionales por sullinsan
Requerimientos Funcionales y no FuncionalesRequerimientos Funcionales y no Funcionales
Requerimientos Funcionales y no Funcionales
sullinsan1.3K vistas
Aprendendo objective c - parte 1 por Alamo Saravali
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
Alamo Saravali17.2K vistas
和艦長一起玩轉 GitLab & GitLab Workflow por Chen Cheng-Wei
和艦長一起玩轉 GitLab & GitLab Workflow和艦長一起玩轉 GitLab & GitLab Workflow
和艦長一起玩轉 GitLab & GitLab Workflow
Chen Cheng-Wei5.9K vistas

Destacado

TypeScript - Angular 2 - ionic 2 por
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2Micael Gallego
37.9K vistas257 diapositivas
Desarrollo web front-end con TypeScript, Angular 2 e Ionic por
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicMicael Gallego
7.4K vistas129 diapositivas
Aplicaciones Web SPA con WebAPI y TypeScript por
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptLuis Guerrero
687 vistas13 diapositivas
Angular 2 Campus Madrid Septiembre 2016 por
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Micael Gallego
5.7K vistas235 diapositivas
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int... por
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...Marcos Gonzalez
1.7K vistas28 diapositivas
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond por
Modeling and Code Generation in the Cloud for Citizen Developers and BeyondModeling and Code Generation in the Cloud for Citizen Developers and Beyond
Modeling and Code Generation in the Cloud for Citizen Developers and BeyondPedro J. Molina
706 vistas13 diapositivas

Destacado(20)

TypeScript - Angular 2 - ionic 2 por Micael Gallego
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
Micael Gallego37.9K vistas
Desarrollo web front-end con TypeScript, Angular 2 e Ionic por Micael Gallego
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Micael Gallego7.4K vistas
Aplicaciones Web SPA con WebAPI y TypeScript por Luis Guerrero
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScript
Luis Guerrero687 vistas
Angular 2 Campus Madrid Septiembre 2016 por Micael Gallego
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
Micael Gallego5.7K vistas
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int... por Marcos Gonzalez
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...
Marcos Gonzalez1.7K vistas
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond por Pedro J. Molina
Modeling and Code Generation in the Cloud for Citizen Developers and BeyondModeling and Code Generation in the Cloud for Citizen Developers and Beyond
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond
Pedro J. Molina706 vistas
CG2010 Tailored Code Generators por Pedro J. Molina
CG2010 Tailored Code GeneratorsCG2010 Tailored Code Generators
CG2010 Tailored Code Generators
Pedro J. Molina1.3K vistas
Scaling MDD for production: enabling SoC at model time por Pedro J. Molina
Scaling MDD for production: enabling SoC at model timeScaling MDD for production: enabling SoC at model time
Scaling MDD for production: enabling SoC at model time
Pedro J. Molina932 vistas
Multichannel User Interfaces por Pedro J. Molina
Multichannel User InterfacesMultichannel User Interfaces
Multichannel User Interfaces
Pedro J. Molina1.4K vistas
Hivepod: Casos de uso en OpenData por Pedro J. Molina
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenData
Pedro J. Molina797 vistas
Modelling and code generation in .NET at Icinetic por Pedro J. Molina
Modelling and code generation in .NET at IcineticModelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at Icinetic
Pedro J. Molina924 vistas
MDD: Models, frameworks, & code generation por Pedro J. Molina
MDD: Models, frameworks, & code generationMDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generation
Pedro J. Molina2.9K vistas
SVQDC 2017 Tecnologías para Microservicios por Pedro J. Molina
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
Pedro J. Molina1.1K vistas
Microservicios sobre MEAN Stack por Pedro J. Molina
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
Pedro J. Molina1.7K vistas
Tecnologías para microservicios por Pedro J. Molina
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
Pedro J. Molina3.6K vistas
Introduccion a los Servicios Web Rest por David J. Brenes
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web Rest
David J. Brenes6K vistas

Similar a Introducción a Angular

inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D por
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
1.4K vistas34 diapositivas
Concurrencia en Java por
Concurrencia en Java Concurrencia en Java
Concurrencia en Java Pedro Gonzalez
109 vistas26 diapositivas
Presentacion #bbmnk por
Presentacion #bbmnkPresentacion #bbmnk
Presentacion #bbmnkJuan Miqueo
288 vistas33 diapositivas
Desarrollando una Extensión para Docker por
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para DockerAngel Borroy López
33 vistas22 diapositivas
GWT - Una introducción por
GWT - Una introducciónGWT - Una introducción
GWT - Una introducciónCarlos Gavidia-Calderon
2.1K vistas46 diapositivas
Vue + Typescript: Decorators vs. Extend, Fight! por
Vue + Typescript: Decorators vs. Extend, Fight!Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Sara Lissette L. Ibáñez
1.1K vistas40 diapositivas

Similar a Introducción a Angular(20)

inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D por inLabFIB
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLabFIB1.4K vistas
Presentacion #bbmnk por Juan Miqueo
Presentacion #bbmnkPresentacion #bbmnk
Presentacion #bbmnk
Juan Miqueo288 vistas
Desarrollo de aplicaciones android con Python por Manuel Pérez
Desarrollo de aplicaciones android con PythonDesarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con Python
Manuel Pérez892 vistas
Java Script Frame Works por hectorguedea
Java Script Frame WorksJava Script Frame Works
Java Script Frame Works
hectorguedea712 vistas
La web como Plataforma con Dojo Toolkit por Alex Fuentes
La web como Plataforma con Dojo ToolkitLa web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo Toolkit
Alex Fuentes2.5K vistas
Docker para aplicaciones angular por Germán Küber
Docker para aplicaciones angularDocker para aplicaciones angular
Docker para aplicaciones angular
Germán Küber924 vistas
Algoritmos - Funciones C++ por Ronal Palomino
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
Ronal Palomino5.3K vistas

Más de Pedro J. Molina

MDE en la industria por
MDE en la industriaMDE en la industria
MDE en la industriaPedro J. Molina
10 vistas55 diapositivas
Terraform por
TerraformTerraform
TerraformPedro J. Molina
5 vistas1 diapositiva
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web por
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebPedro J. Molina
85 vistas20 diapositivas
Infrastructure as Code with Terraform por
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with TerraformPedro J. Molina
51 vistas34 diapositivas
Are Startups for me? por
Are Startups for me?Are Startups for me?
Are Startups for me?Pedro J. Molina
465 vistas18 diapositivas
Meow Demo por
Meow DemoMeow Demo
Meow DemoPedro J. Molina
228 vistas5 diapositivas

Más de Pedro J. Molina(19)

dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web por Pedro J. Molina
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
Pedro J. Molina85 vistas
Infrastructure as Code with Terraform por Pedro J. Molina
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
Pedro J. Molina51 vistas
Essential as the base for Web DSLs por Pedro J. Molina
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
Pedro J. Molina300 vistas
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina por Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. MolinaACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
Pedro J. Molina646 vistas
Securizando por construcción mediante MDE por Pedro J. Molina
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
Pedro J. Molina237 vistas
Building APIs with the OpenApi Spec por Pedro J. Molina
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
Pedro J. Molina1K vistas
Opensouthcode: Microservicios sobre MEAN Stack por Pedro J. Molina
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
Pedro J. Molina1.2K vistas
Modelling the User Interface por Pedro J. Molina
Modelling the User InterfaceModelling the User Interface
Modelling the User Interface
Pedro J. Molina4.5K vistas

Último

Tecnologia (1).pdf por
Tecnologia (1).pdfTecnologia (1).pdf
Tecnologia (1).pdfnosi6702
9 vistas13 diapositivas
Qué es el rodamiento hacia adelante.docx por
Qué es el rodamiento hacia adelante.docxQué es el rodamiento hacia adelante.docx
Qué es el rodamiento hacia adelante.docxFabianCarrillo31
7 vistas1 diapositiva
Aws Community Day Guatemala Criptografia con AWS KMS por
Aws Community Day Guatemala Criptografia con AWS KMSAws Community Day Guatemala Criptografia con AWS KMS
Aws Community Day Guatemala Criptografia con AWS KMSMario IC
26 vistas42 diapositivas
Operations & Data Graph por
Operations & Data GraphOperations & Data Graph
Operations & Data GraphNeo4j
42 vistas25 diapositivas
Tecnologia (3).pdf por
Tecnologia (3).pdfTecnologia (3).pdf
Tecnologia (3).pdfnosi6702
7 vistas15 diapositivas
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1 por
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1Angel Borroy López
6 vistas22 diapositivas

Último(8)

Tecnologia (1).pdf por nosi6702
Tecnologia (1).pdfTecnologia (1).pdf
Tecnologia (1).pdf
nosi67029 vistas
Qué es el rodamiento hacia adelante.docx por FabianCarrillo31
Qué es el rodamiento hacia adelante.docxQué es el rodamiento hacia adelante.docx
Qué es el rodamiento hacia adelante.docx
FabianCarrillo317 vistas
Aws Community Day Guatemala Criptografia con AWS KMS por Mario IC
Aws Community Day Guatemala Criptografia con AWS KMSAws Community Day Guatemala Criptografia con AWS KMS
Aws Community Day Guatemala Criptografia con AWS KMS
Mario IC26 vistas
Operations & Data Graph por Neo4j
Operations & Data GraphOperations & Data Graph
Operations & Data Graph
Neo4j42 vistas
Tecnologia (3).pdf por nosi6702
Tecnologia (3).pdfTecnologia (3).pdf
Tecnologia (3).pdf
nosi67027 vistas
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1 por Angel Borroy López
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1
La Guía Definitiva para una Actualización Exitosa a Alfresco 23.1
Peña_Anaya_TAREA Reportes Maestro - Detalle con el uso de AJAX.pptx por MOISESPENAANAYA
Peña_Anaya_TAREA Reportes Maestro - Detalle con el uso de AJAX.pptxPeña_Anaya_TAREA Reportes Maestro - Detalle con el uso de AJAX.pptx
Peña_Anaya_TAREA Reportes Maestro - Detalle con el uso de AJAX.pptx
MOISESPENAANAYA6 vistas

Introducción a Angular

  • 1. Introducción a Angular Dr. Pedro J. Molina http://pjmolina.com @pmolinam
  • 2. Agenda Origen Soporte en navegadores Conceptos y arquitectura angular-cli Módulos, Componentes Servicios, Directivas Navegación Web Components
  • 3. Prerrequisitos  NodeJS  https://nodejs.org  Editor de textos: tu editor favorito (con soporte a TS)  VS Code https://code.visualstudio.com  Atom https://atom.io  SublimeText 3 https://www.sublimetext.com/3  WebStorm https://www.jetbrains.com/webstorm/  Chrome Web Browser p.e. (cualquier evergreen browser nos sirve)  Git
  • 4. Angular 2  Framework para capa cliente  Impulsado por Google  Diseñado para móvil primero, desktop después  AngularJS v. 1.0 tuvo una gran cuota de mercado. Ng2 reescrito desde cero.  Abraza TypeScript como su principal lenguaje recomendado
  • 6. Ng2 Breve Historia  Ng1 2009  Ng2 Alfa, Abril 2015  AtScript  TypeScript (acuerdo con Microsoft)  Entrada y Salida Rob Eisenberg @eisenbergEffect  Versiones rc.* (~)  Versión final 2.0 14 Septiembre, 2016  Versión actual 2.4.4  En preparación 4.x (Compatible con Ng2)
  • 9. Organización de ficheros y carpetas  Nombrado de ficheros  PascalCase  camelCase  snake_case  kebab-case  Organización en carpetas por módulos y componentes
  • 10. Prerrequisitos  NodeJS v. 4.x o superior  NPM v. 3.x.x o superior node -v npm -v npm i –g npm
  • 11. Angular-cli Herramienta de línea de comando para agilizar la creación de proyectos NG2 Generador de código sencillo semilla (scaffolding) tipo Ruby On Rails https://cli.angular.io npm i –g angular-cli
  • 12. Angular-cli Creada por el equipo de NG2 Sigue las buenas practicas recomendadas por el equipo Referencia de comandos: https://cli.angular.io/reference.pdf
  • 13. Angular-cli. Comandos ng newCrear proyecto Generar Lanzar en desarrollo Construir ng generate <name> ng serve ng build
  • 14. ng-cli con preprocesadores de CSS Soportados: Sass/scss Less Stylus https://github.com/angular/angular-cli#css-preprocessor-integration ng new app0 --style=sass
  • 15. Angular-cli. Comandos de generación ng g component <nombre> ng g directive <nombre> ng g pipe <nombre> ng g service <nombre> ng g class <nombre> ng g interface <nombre> ng g enum <nombre> ng g module <nombre> Nuevo: Componente Directiva Tubería Servicio Clase Interfaz Enumerado Modulo
  • 16. Angular-cli. Comandos deTest ng testLanzar Tests de Unidad Lanzar Tests Extremo a Extremo ng e2e
  • 17. Módulos  Unidad lógica de organización de código en AngularJS2 import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @NgModule({ imports: [ BrowserModule ], providers: [ Logger ], declarations: [ AppComponent ], exports: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { }
  • 18. Bootstraping  Punto de entrada y arranque import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app.module'; platformBrowserDynamic().bootstrapModule(AppModule);
  • 19. Librerías AngularJS2  Se instalan con npm  Se importan con import import { Component } from ‘@angular/core';
  • 20. Componentes  Clases que controlan el comportamiento, interacción con el usuario y pintado de controles @Component(…) export class HeroListComponent implements OnInit { heroes: Hero[]; selectedHero: Hero; constructor(private service: HeroService) { } ngOnInit() { this.heroes = this.service.getHeroes(); } selectHero(hero: Hero) { this.selectedHero = hero; } }
  • 21. Propiedades  Propiedades de un control visibles desde el exterior export class UserComponent { @Input() name: string; @Input() surname: string; } <my-user name="Jesica" surname="Alba"> </my-user>
  • 22. Eventos  Eventos públicos del componente export class UserComponent { @Output() selected = new EventEmitter(); … this.selected.emit(params); } <my-user name="Jesica" (selected)="onSelected()"> </my-user>
  • 23. Ciclo de vida del componente  Eventos que se disparan durante la inicialización y cierre de un componente.  https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html
  • 24. Plantillas  HTML con extensiones de plantillas para NG2 <h2>Hero List</h2> <p><i>Pick a hero from the list</i></p> <ul> <li *ngFor="let h of heroes" (click)="selectHero(h)"> {{h.name}} </li> </ul> <hero-detail *ngIf="selectedHero" [hero]="selectedHero"> </hero-detail>
  • 25. Metadatos  Los metadatos son atributos (datos) que indican a NG2 como procesar cada clase. @Component({ moduleId: module.id, selector: 'hero-list', templateUrl: ‘./hero-list.component.html', providers: [ HeroService ] }) export class HeroListComponent implements OnInit { /* . . . */ }
  • 26. Enlace de datos  Hay tres modos de enlazar datos al DOM  One way [] o {{}}  Eventos ()  Two-way [()] Banana en la caja <li>{{hero.name}}</li> <hero-detail [hero]="selectedHero"></hero- detail> <li (click)="selectHero(hero)"></li> <input [(ngModel)]="hero.name">
  • 29. Directivas  Permiten extender el comportamiento de los componentes Angular a nivel de estructural y de atributo.  Estructurales:  Atributo: *ngFor *ngIf <input [(ngModel)]="hero.name">
  • 30. Servicios  Encapsulan comportamiento: calculo, comunicaciones (generalmente sin interacción de UI) (lógica de negocio).  Se implementan con clases export class Logger { log(msg: any) { console.log(msg); } error(msg: any) { console.error(msg); } warn(msg: any) { console.warn(msg); } } export class HeroComponent { constructor(private logger: Logger) { } }
  • 31. Inyección de Dependencias  Patrón de arquitectura que permite flexibilizar el reemplazo de servicios en diferentes contextos (p.e. producción vs test) @Injectable() export class Logger { log(msg: any) { console.log(msg); } error(msg: any) { console.error(msg); } warn(msg: any) { console.warn(msg); } } export class HeroComponent { constructor(private logger: Logger) { } }
  • 32. Inyección de Dependencias  NG2 resuelve como inyectar dependencias usado la configuración de proveedores. providers: [ BackendService, HeroService, Logger ]
  • 33. Inyección de Dependencias  El alcance de un servicio depende de donde se registra.  Se comportan como singleton (instancia única) a nivel de módulo o componente raiz.  Se comportan como múltiples instancias si se registran a nivel de componente (cada nuevo componente recibe una nueva copia inyectada del servicio).
  • 34. Sintaxis de plantillas  Interpolación  Calculo de cadenas en HTML y valores de atributos. <p>My current hero is {{currentHero.firstName}}</p> <h3> {{title}} <img src="{{heroImageUrl}}" style="height:30px"> </h3>
  • 35. Expresiones en plantillas  Solo pueden referencias propiedades del componente.  Sin ámbito global. Sin acceso a window  Recomendaciones para expresiones:  Sin efectos secundarios (no side effects)  Ejecución rápida  Simplicidad  Idempotencia <p>Longitud: {{2 * pi * radio}}</p>
  • 36. Chuleta de trucos / Cheatsheet Para tener a mano y actualizada: https://angular.io/docs/ts/latest/guide/cheatsheet.html
  • 37. Guía de Estilo NG2 Guía de estilo. Nombrado y estilo de código https://angular.io/docs/ts/latest/guide/style-guide.html
  • 38. Tuberías / Pipes  Una tubería permite formatear y filtrar datos.  Se pueden componer. En Ng1 se llamaban filtros. Ejemplo de uso: import { Component } from '@angular/core'; @Component({ selector: 'hero-birthday', template: `<p>Born date: {{ d1 | date:shortDate }}</p>` }) export class HeroBirthdayComponent { d1 = new Date(1988, 3, 15); // April 15, 1988 }
  • 39. Tuberías / Pipes Ejemplo de implementación: import { Pipe, PipeTransform } from '@angular/core'; /* Raise the value exponentially * Takes an exponent argument that defaults to 1. * Example: {{ 2 | exponentialStrength:10}} */ @Pipe({name: 'exponentialStrength'}) export class ExponentialStrengthPipe implements PipeTransform { transform(value: number, exponent: string): number { let exp = parseFloat(exponent); return Math.pow(value, isNaN(exp) ? 1 : exp); } }
  • 40. Tuberías / Pipes Ejemplo de uso como filtro de una colección: <div *ngFor="let hero of (heroes | flyingHeroes)"> {{hero.name}} </div> import { Pipe, PipeTransform } from '@angular/core'; import { Hero } from './heroes'; @Pipe({ name: 'flyingHeroes' }) export class FlyingHeroesPipe implements PipeTransform { transform(allHeroes: Hero[]): Hero[] { return allHeroes.filter(hero => hero.canFly); } }
  • 41. Directivas Estructural *ngIf Permite añadir contenido de forma condicional <div *ngIf="condicion"> {{contenido}} </div> <div *ngIf="obj"> <p>{{obj.name}}</p> </div>
  • 42. Directivas Estructural *ngFor Permite iterar una colección insertando contenido para cada elemento <div *ngFor=“let hero of heroes"> {{hero.name}} {{hero.lastname}} </div>
  • 43. Cliente HTTP Nos permite salir del browser a la peligrosa Internet Para usarlo tenemos que: Importar el módulo HttpModule desde @angular/http Importar las operaciones para Observables (dependencia) import 'rxjs/operator';
  • 44. Cliente HTTP. Ejemplo de uso en Servicio Versión con Observables import { Http, Headers, Response } from ‘@angular/http’; … constructor(private http: Http) {} … getCountries(): Observable<Country[]> { return this.http.get(this.serviceUrl) .map(this.extractData) .catch(this.handleError); }
  • 45. Cliente HTTP. Ejemplo de uso en Servicio Versión con Promesas import { Http, Headers, Response } from ‘@angular/http’; … constructor(private http: Http) {} … getCountries (): Promise<Country[]> { return this.http.get(this.serviceUrl) .map(this.extractData) .catch(this.handleError) .toPromise();
  • 46. Navegación / Router ¿Cómo navegar entre paginas? El router proporciona mecanismo para navegar dentro de la aplicación (SPA) reescribiendo la URL en el navegador Es una de las piezas que mas cambios (roturas de compatibilidad) ha tenido durante las betas y versiones RC Ya está estabilizada, afortunadamente.
  • 47. Navegación / Router Index.html añadir <head> … <base href="/"> … </head>
  • 48. Navegación / Router app.routing.ts import { RouterModule, Routes } from '@angular/router'; import { HomeComponent } from './home/home.component'; import { AboutComponent } from './about/about.component'; const routes: Routes = [ { path: 'home', component: HomeComponent }, { path: 'about', component: AboutComponent}, { path: ‘city/:id', component: CityDetailComponent}, ]; export const routing = RouterModule.forRoot(routes);
  • 49. Navegación / Router El Router es una tabla de rutas que mapea rutas a componentes para resolver que componente debe mostrarse al navegar a esa ruta. El orden importa (precedencia de rutas) first-match-wins No se pone ‘/’ al comienzo de ruta ‘’ = ruta por defecto ‘**’ = cualquier otra ruta Se permiten parámetros en la ruta
  • 50. Navegación / Router Añadiendo la definición de rutas en el Module.ts import { routing } from './app.routing'; … @NgModule({ imports: [routing, …
  • 51. Navegación / Router app.component.html <header> <nav> <a [routerLink]="['home']">Inicio</a> <a [routerLink]="['about']">Acerca de…</a> <a [routerLink]="['city/AGP']">Málaga</a> <a [routerLink]="['city/SVQ']">Sevilla</a> </nav> </header> <main> <router-outlet></router-outlet> </main>
  • 52. Navegación / Router Composición de rutas Si la aplicación esta compuesta por diversos módulos, cada modulo puede (y debe) gestionar sus rutas como “sub-rutas” Única diferencia, el registro: export const routing = RouterModule.forRoot(routes); export const citiesRoutes = RouterModule.forChild(routes);
  • 53. WebComponents La “moda”/estandar a punto de llegar Recomendación de la W3C. Polymer (impulsor) Establece de modo estándar unas APIs mínimas para permitir componentes en los navegadores. Intro a Webcomponents. https://component.kitchen/tutorial
  • 54. WebComponents Tecnologías subyacentes 1. Custom HTML Elements 2. HTML Templates 3. Shadow DOM DOM into DOM 4. HTML Imports <link rel="import" href="my-element/my-element.html"> <my-tag> </my-tag> <template>…
  • 55. WebComponents Con la popularalización de WebComponents veremos: Portales compuestos por componentes hechos con diversas tecnologías como: Polymer, AngularJS2, React, AngularJS1, Aurelia, jQuery, … Los componentes se comunican con el resto vía eventos y propiedades (con o sin data-binding)
  • 56. Desarrollo de aplicaciones móviles con Angular Ionic2  Angular2 + Cordova = Ionic2 http://ionic.io/2
  • 57. Referencias  AngularJS 2 https://angular.io  Tutorial https://angular.io/docs/ts/latest/tutorial  Angular-CLI https://cli.angular.io  Plantilla con webpack https://github.com/preboot/angular2- webpack  Ejemplo https://github.com/pjmolina/lemoncity-ng2