SlideShare uma empresa Scribd logo
1 de 58
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
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

Mais conteúdo relacionado

Mais procurados

Cuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoCuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoFreddySantiago32
 
Ejemplo pruebas de software
Ejemplo pruebas de softwareEjemplo pruebas de software
Ejemplo pruebas de softwareJohn Fonseca
 
4. Desarrollo ágil de software
4. Desarrollo ágil de software4. Desarrollo ágil de software
4. Desarrollo ágil de softwareCoesi Consultoria
 
Ejemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rupEjemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rupXochitl Saucedo Muñoz
 
Ejemplos de proyectos al modelo en cascada
Ejemplos de proyectos  al modelo en cascadaEjemplos de proyectos  al modelo en cascada
Ejemplos de proyectos al modelo en cascadaaics-1986-13-saraguro
 
Cuestionario
CuestionarioCuestionario
CuestionarioJose Nava
 
Sesion 2 1 modelo del negocio
Sesion 2 1 modelo del negocioSesion 2 1 modelo del negocio
Sesion 2 1 modelo del negocioJulio Pari
 
Primeros artefactos de análisis. casos de uso
Primeros artefactos de análisis. casos de usoPrimeros artefactos de análisis. casos de uso
Primeros artefactos de análisis. casos de usoJuan Pablo Bustos Thames
 
Arquitectura de software orientada a patrones
Arquitectura de software orientada a patronesArquitectura de software orientada a patrones
Arquitectura de software orientada a patronesGustavo De la Cruz Tovar
 
2 2 estilos arquitectonicos
2 2 estilos arquitectonicos2 2 estilos arquitectonicos
2 2 estilos arquitectonicoslandeta_p
 
1 2 2 Relaciones Entre Clases
1 2 2 Relaciones Entre Clases1 2 2 Relaciones Entre Clases
1 2 2 Relaciones Entre ClasesUVM
 
Presentacion eclipse - grupo 6
Presentacion   eclipse - grupo 6Presentacion   eclipse - grupo 6
Presentacion eclipse - grupo 6Maga Lasic
 

Mais procurados (20)

Cuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientadoCuadro comparativo de enfoque estructurado y enfoque orientado
Cuadro comparativo de enfoque estructurado y enfoque orientado
 
Ejemplo pruebas de software
Ejemplo pruebas de softwareEjemplo pruebas de software
Ejemplo pruebas de software
 
Utilizando Metodologia Rup Parte1
Utilizando Metodologia Rup Parte1Utilizando Metodologia Rup Parte1
Utilizando Metodologia Rup Parte1
 
Vista lógica
Vista lógicaVista lógica
Vista lógica
 
4. Desarrollo ágil de software
4. Desarrollo ágil de software4. Desarrollo ágil de software
4. Desarrollo ágil de software
 
Ejemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rupEjemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rup
 
Metodología RUP
Metodología RUPMetodología RUP
Metodología RUP
 
Ejemplos de proyectos al modelo en cascada
Ejemplos de proyectos  al modelo en cascadaEjemplos de proyectos  al modelo en cascada
Ejemplos de proyectos al modelo en cascada
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Sesion 2 1 modelo del negocio
Sesion 2 1 modelo del negocioSesion 2 1 modelo del negocio
Sesion 2 1 modelo del negocio
 
Metodologias web
Metodologias webMetodologias web
Metodologias web
 
Primeros artefactos de análisis. casos de uso
Primeros artefactos de análisis. casos de usoPrimeros artefactos de análisis. casos de uso
Primeros artefactos de análisis. casos de uso
 
Programación Orientada a Objetos
Programación Orientada  a ObjetosProgramación Orientada  a Objetos
Programación Orientada a Objetos
 
Reglas Negocio
Reglas NegocioReglas Negocio
Reglas Negocio
 
Historias de usuario
Historias de usuarioHistorias de usuario
Historias de usuario
 
Modelado conceptual de aplicaciones web
Modelado conceptual de aplicaciones webModelado conceptual de aplicaciones web
Modelado conceptual de aplicaciones web
 
Arquitectura de software orientada a patrones
Arquitectura de software orientada a patronesArquitectura de software orientada a patrones
Arquitectura de software orientada a patrones
 
2 2 estilos arquitectonicos
2 2 estilos arquitectonicos2 2 estilos arquitectonicos
2 2 estilos arquitectonicos
 
1 2 2 Relaciones Entre Clases
1 2 2 Relaciones Entre Clases1 2 2 Relaciones Entre Clases
1 2 2 Relaciones Entre Clases
 
Presentacion eclipse - grupo 6
Presentacion   eclipse - grupo 6Presentacion   eclipse - grupo 6
Presentacion eclipse - grupo 6
 

Destaque

TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2Micael Gallego
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
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
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptLuis Guerrero
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Micael Gallego
 
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...
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...Marcos Gonzalez
 
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond
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
 
Introducción a StackOverflow
Introducción a StackOverflowIntroducción a StackOverflow
Introducción a StackOverflowPedro J. Molina
 
CG2010 Tailored Code Generators
CG2010 Tailored Code GeneratorsCG2010 Tailored Code Generators
CG2010 Tailored Code GeneratorsPedro J. Molina
 
Scaling MDD for production: enabling SoC at model time
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 timePedro J. Molina
 
Multichannel User Interfaces
Multichannel User InterfacesMultichannel User Interfaces
Multichannel User InterfacesPedro J. Molina
 
Hivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenDataPedro J. Molina
 
Modelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at IcineticModelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at IcineticPedro J. Molina
 
MDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generationMDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generationPedro J. Molina
 
SVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosPedro J. Molina
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
Introduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestDavid J. Brenes
 

Destaque (20)

TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
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
 
Aplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScriptAplicaciones Web SPA con WebAPI y TypeScript
Aplicaciones Web SPA con WebAPI y TypeScript
 
Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
 
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...
Desarrollando Juegos Casuales para dispositivos con HTML5 sin morir en el int...
 
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond
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
 
Introducción a StackOverflow
Introducción a StackOverflowIntroducción a StackOverflow
Introducción a StackOverflow
 
CG2010 Tailored Code Generators
CG2010 Tailored Code GeneratorsCG2010 Tailored Code Generators
CG2010 Tailored Code Generators
 
Scaling MDD for production: enabling SoC at model time
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
 
Multichannel User Interfaces
Multichannel User InterfacesMultichannel User Interfaces
Multichannel User Interfaces
 
Hivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenData
 
Modelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at IcineticModelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at Icinetic
 
TDD+CI con Teamcity
TDD+CI con TeamcityTDD+CI con Teamcity
TDD+CI con Teamcity
 
MDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generationMDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generation
 
SVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
El viaje de Angular1 a Angular2
El viaje de Angular1 a Angular2El viaje de Angular1 a Angular2
El viaje de Angular1 a Angular2
 
Modeling on the Web
Modeling on the WebModeling on the Web
Modeling on the Web
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Introduccion a los Servicios Web Rest
Introduccion a los Servicios Web RestIntroduccion a los Servicios Web Rest
Introduccion a los Servicios Web Rest
 

Semelhante a Introducción a Angular

inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
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
 
Presentacion #bbmnk
Presentacion #bbmnkPresentacion #bbmnk
Presentacion #bbmnkJuan Miqueo
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para DockerAngel Borroy López
 
Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Sara Lissette L. Ibáñez
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netAntonio Palomares Sender
 
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
 
Desarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con PythonDesarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con PythonManuel Pérez
 
Java Script Frame Works
Java Script Frame WorksJava Script Frame Works
Java Script Frame Workshectorguedea
 
La web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitLa web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitAlex Fuentes
 
Docker para aplicaciones angular
Docker para aplicaciones angularDocker para aplicaciones angular
Docker para aplicaciones angularGermán Küber
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++ Ronal Palomino
 

Semelhante a Introducción a Angular (20)

inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
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
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Presentacion #bbmnk
Presentacion #bbmnkPresentacion #bbmnk
Presentacion #bbmnk
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para Docker
 
GWT - Una introducción
GWT - Una introducciónGWT - Una introducción
GWT - Una introducción
 
Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
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
 
Rackio framework
Rackio frameworkRackio framework
Rackio framework
 
Desarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con PythonDesarrollo de aplicaciones android con Python
Desarrollo de aplicaciones android con Python
 
Java Script Frame Works
Java Script Frame WorksJava Script Frame Works
Java Script Frame Works
 
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
 
Empezando con Angular 2
Empezando con Angular 2Empezando con Angular 2
Empezando con Angular 2
 
La web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo ToolkitLa web como Plataforma con Dojo Toolkit
La web como Plataforma con Dojo Toolkit
 
Capa de persistencia con ecto
Capa de persistencia con ectoCapa de persistencia con ecto
Capa de persistencia con ecto
 
GWT
GWTGWT
GWT
 
Docker para aplicaciones angular
Docker para aplicaciones angularDocker para aplicaciones angular
Docker para aplicaciones angular
 
Django
DjangoDjango
Django
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 

Mais de Pedro J. Molina

dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
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
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with TerraformPedro J. Molina
 
LangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialLangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialPedro J. Molina
 
Essential as the base for Web DSLs
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLsPedro J. Molina
 
ACM SIGCHI EICS-2019 Keynote. Quid, 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. MolinaPedro J. Molina
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web ComponentsPedro J. Molina
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web componentsPedro J. Molina
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDEPedro J. Molina
 
Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi SpecPedro J. Molina
 
Micro vs Nano (servicios)
Micro vs Nano (servicios)Micro vs Nano (servicios)
Micro vs Nano (servicios)Pedro J. Molina
 
Diseño de APIs con OpenAPI
Diseño de APIs con OpenAPIDiseño de APIs con OpenAPI
Diseño de APIs con OpenAPIPedro J. Molina
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackPedro J. Molina
 
Modelling the User Interface
Modelling the User InterfaceModelling the User Interface
Modelling the User InterfacePedro J. Molina
 

Mais de Pedro J. Molina (20)

MDE en la industria
MDE en la industriaMDE en la industria
MDE en la industria
 
Terraform
TerraformTerraform
Terraform
 
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
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
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
 
LangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialLangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with Essential
 
Are Startups for me?
Are Startups for me?Are Startups for me?
Are Startups for me?
 
Meow Demo
Meow DemoMeow Demo
Meow Demo
 
Essential as the base for Web DSLs
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
 
ACM SIGCHI EICS-2019 Keynote. Quid, 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
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web Components
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web components
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
Quid
QuidQuid
Quid
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
 
Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
 
Micro vs Nano (servicios)
Micro vs Nano (servicios)Micro vs Nano (servicios)
Micro vs Nano (servicios)
 
Diseño de APIs con OpenAPI
Diseño de APIs con OpenAPIDiseño de APIs con OpenAPI
Diseño de APIs con OpenAPI
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
Introducing MDSD
Introducing MDSDIntroducing MDSD
Introducing MDSD
 
Modelling the User Interface
Modelling the User InterfaceModelling the User Interface
Modelling the User Interface
 

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">
  • 28.
  • 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