129
Micael Gallego @micael_gallego Desarrollo web frontend con y cómo hemos llegado hasta aquí Febrero 2016

Desarrollo web front-end con TypeScript, Angular 2 e Ionic

Embed Size (px)

Citation preview

Page 1: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

Micael Gallego@micael_gallego

Desarrollo web frontend

con

y cómo hemos llegado hasta aquí

Febrero 2016

Page 2: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

2

Nacimiento de la web

Page 3: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

3

Nacimiento de la web

Hace 24 años nace la webEn 1992 dos investigadores del CERN presentan la web

Tim Berners-LeeRobert Cailliau

Page 4: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

4

Nacimiento de la web

Elementos básicos

Navegador web Servidor web

Protocolo HttpTCP/IP - Internet

Page 5: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

5

Nacimiento de la web

Elementos básicos

Navegador web Servidor web

Protocolo HttpTCP/IP - Internet

URL

Page 6: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

6

Nacimiento de la web

Elementos básicos

Navegador web Servidor web

Protocolo HttpTCP/IP - Internet

URL

HTML + Imágenes

Page 7: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

7

Nacimiento de la web

CERN (1990)

Page 8: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

8

Nacimiento de la web

CERN (1990)

Page 9: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

9

Nacimiento de la web

Mosaic (1993)

Page 10: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

10

Nacimiento de la web

<!DOCTYPE html><html> <body>

<h1>This is heading 1</h1> <h2>This is heading 2</h2> <h3>This is heading 3</h3> <h4>This is heading 4</h4> <h5>This is heading 5</h5> <h6>This is heading 6</h6>

<p>This paragraph one.</p> <p>This paragraph two.</p> <p>Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla.</p>

</body></html>

index.htmlVisualización en el navegador

HTML

Page 11: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

11

Nacimiento de la web

CSS nace a los 4 añospara separar contenido y estilo (1996)

<!DOCTYPE html><html> <head> <title>Result</title> <link type="text/css" rel="stylesheet" href="style.css"/> </head> <body> <p>I’m blue</p> </body></html>

p { color: blue;}

style.css

index.html

Page 12: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

12

Nacimiento de la web

CSS

p { font-family: Arial; color: blue; font-size: 12px;}h3 { color: red; }span { background-color: yellow;}

<h3>What's CSS for?</h3><p>CSS is for styling HTML pages!</p><h3>Why use it?</h3><p>It makes webpages look <span>really rad</span>.</p><h3>What do I think of it?</h3><p>It's awesome!</p>

Page 13: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

13

Nacimiento de la web

JavaScript nació un año antesAunque ha tenido diferentes nombres, el lenguaje apareció en el

navegador web Netscape en 1995

<!DOCTYPE html><html> <body>

<button onclick="myFunction()">Try it</button>

<script> function myFunction() { alert("Hello\nHow are you?"); } </script>

</body></html>

Page 14: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

14

Evolución de la web

Page 15: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

15

Evolución de la web

Navegadores web

http://gs.statcounter.com

2016201420122010

IE

Chrome

Firefox

Safari

Opera

Page 16: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

16

Evolución de la web

La web ha ido creciendocon estándares

Page 17: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

17

Evolución de la web

Aunque algunos no los respetaban

Page 18: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

18

Evolución de la web

También se han usado pluginsno estándares y no disponibles en

todas las plataformas

Page 19: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

19

Evolución de la web

¿Y los servidores web?Al principio los servidores web únicamente

servían los ficheros del disco duro

(1995)(1995)

Page 20: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

20

Evolución de la web

Se han transformado en aplicacionesque generan cada página con la información que

envía el usuario y/o la que está en la base de datos

Navegador web

Servidor web

1 - URL

Base de datos

2 - SQL

4 - HTML 3 - Data

Page 21: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

21

Evolución de la web

Tecnologías desarrollo web servidor

Page 22: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

22

El desarrollo web hoy

Page 23: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

23

El desarrollo web hoy

Existen varios tipos de websDependiendo de cómo usan las tecnologías

de cliente y servidor

Página web Aplicación webServidor estático

El servidor web sirve contenido guardado en el

disco duro

Servidor dinámico

El servidor web sirve contenido generado

mediante código

Page 24: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

24

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 25: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

25

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 26: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

26

•Página web estática El navegador hace petición al servidor mediante http El servidor transforma URL a ruta en disco El servidor devuelve el fichero de disco al navegador El navegador visualiza la página HTML con estilos CSS e

imágenes (sin JavaScript). Cuando el usuario hace clic en un enlace, el navegador

repite el proceso con la URL del link y recarga por completo la página web

El desarrollo web hoy

Page 27: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

2727

27

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEB

Page 28: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

2828

28

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEB

Page 29: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

29

El desarrollo web hoy

● Página web estática● Se implementa con HTML y CSS● Se utilizan librerías de componentes CSS

● Bibliotecas de componentes predefinidos● Diseño responsive (adaptativo a móviles)● Distribución de componentes

Page 30: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

30

Page 31: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

31

Page 32: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

32

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 33: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

33

•Página web interactiva El contenido de la página web está alojado en el disco duro

del servidor (estático) El cliente es dinámico porque las páginas incluyen código

JavaScript que se ejecuta en el navegador Este JavaScript se usa para incluir efectos gráficos:

Efectos gráficos que no se pueden implementar con CSS Mostrar u ocultar información en función de los elementos que se

seleccionan (para documentos largos) Menús desplegables Buscadores

El desarrollo web hoy

Page 34: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

3434

34

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEB

Buscador implementado en JavaScript

Page 35: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

35

El desarrollo web hoy

● Página web interactiva● Se implementan con HTML, CSS y JavaScript● Para implementar la interactividad en JavaScript

se suele usa la librería jQuery

Page 36: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

36

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 37: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

37

•Aplicación web con cliente estático Cuando el servidor web recibe una petición, dependiendo de

la URL: Devuelve contenido del disco Ejecuta código para generar el recurso dinámicamente

Cuando se ejecuta código, normalmente se hacen consultas a una base de datos para recuperar la información y generar la página HTML

Si el usuario pulsa un link, se recarga la página al completo

El desarrollo web hoy

Page 38: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

3838

38

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEB

Page 39: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

39

•Aplicaciones web con JavaScript• Dependiendo de cómo se usa el JavaScript se

diferencian tres tipos: Aplicación web interactiva Aplicación web con AJAX Aplicación web SPA

El desarrollo web hoy

Page 40: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

40

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 41: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

41

•Aplicación web interactiva El JavaScript se utiliza para crear efectos gráficos

(como las páginas web interactivas) También se utiliza para validaciones de datos en

formularios La gran mayoría de las aplicaciones web

disponibles en Internet son de este tipo Suelen usar jQuery

El desarrollo web hoy

Page 42: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

42

Page 43: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

43

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 44: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

44

El desarrollo web hoy

•Aplicación web con AJAX● AJAX (Asynchronous JavaScript And XML)

JavaScript se usa para no tener que recargar completamente la página al pulsar un link

Permite hacer petición al servidor web en segundo plano (oculta al usuario)

Cuando llega al navegador el resultado de la petición, el código JavaScript actualiza aquellas partes de la página necesarias

Page 45: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

45

•Aplicación web con AJAX

El desarrollo web hoy

Navegador web

Servidor web

Web sin AJAX

Page 46: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

46

•Aplicación web con AJAX

El desarrollo web hoy

Navegador web

Servidor web

Web con AJAX

Page 47: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

47

•Aplicación web con AJAX Usar AJAX en una página mejora mucho la

experiencia de usuario

No es necesario recargar la página al completo, sólo aquellas partes que cambian

Se suelen implementar con jQuery

Se puede usar para simular el efecto de scroll infinito y evitar los botones de anterior / siguiente

El desarrollo web hoy

Page 48: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

48

El desarrollo web hoy

Page 49: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

49

•Aplicación web con AJAX Se puede dar realimentación al usuario antes

de enviar el formulario, por ejemplo en la selección del nombre de usuario si tiene que ser único

El desarrollo web hoy

Page 50: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

50

•Aplicación web con AJAX Cuando el código JavaScript hace

peticiones, el servidor puede devolver:

El desarrollo web hoy

Fragmentos de HTML

Se incrusta directamente

en la página

Scroll infinito

Información estructurada

Se interpreta por JavaScript

para modificar la página

Error de validación

Page 51: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

51

•Aplicación web con AJAX Cuando un servidor web genera

información estructurada ante peticiones http se tiene una API REST

La información se representa en formato JSON

{ form_validation:[ {id:“name”,status:“ok”}, {id:“email”,status:“error”,message:“Invalid format”} ]}

El desarrollo web hoy

Page 52: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

52

El desarrollo web hoy

Página web Aplicación webServidor estático Servidor dinámico

● Página web estática

● Página web interactiva

● Aplicación web con cliente estático

● Aplicación web interactiva

● Aplicación web con AJAX

● Aplicación web SPA

Page 53: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

53

•Aplicación web SPA SPA (Single Page Application)

La técnica AJAX se puede llevar al extremo y que toda la información del servidor sea obtenida con JavaScript en segundo plano, haciendo peticiones a la API REST y obteniendo la información en JSON

La aplicación web es un conjunto de recursos HTML, CSS y JavaScript que se cargan en el navegador al acceder a la URL principal

El desarrollo web hoy

Page 54: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

54

•Aplicación web SPA Google las popularizó con Gmail y Google Maps

El desarrollo web hoy

Page 55: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

5555

55

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEBGoogle Maps

Page 56: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

5656

56

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEBSoundcloud

Page 57: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

5757

57

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEBSlides.com

Page 58: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

5858

58

Arquitecturas de aplicaciones webTECNOLOGÍAS DE DESARROLLO WEBGitHub

Page 59: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

59

El desarrollo web hoy

● Aplicación web SPA● En el lado cliente son aplicaciones autónomas que se

comunican con el servidor con una API REST● Son las más complejas de implementar● Ofrecen una experiencia muy interactiva y dinámica al

usuario● Las tecnologías que se usan para su desarrollo son

completamente diferentes al resto de páginas y aplicaciones web

Page 60: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

60

Desarrollo de webs SPA

Page 61: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

61

Desarrollo de webs SPA

Editores / IDEsEl desarrollo web avanzado tiene sus propias herramientas

Sublime Text Visual Studio Code

WebStorm

Page 62: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

62

Desarrollo de webs SPAAtom

Page 63: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

63

Desarrollo de webs SPA

Plataforma y gestión de paquetes

Plataforma para ejecutar aplicaciones JS fuera del navegador

Gestor de herramientas de desarrollo y librerías JavaScript

Page 64: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

64

Desarrollo de webs SPA

Construcción de proyectos / empaquetado

Page 65: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

65

Desarrollo de webs SPA

Lenguaje programación● Los navegadores web sólo entienden JavaScript

● La última versión de JavaScript (ES6) no está soportada por la mayoría de los navegadores

● Hay traductores de ES6 a ES5 (versión soportada)

● Existen lenguajes de programación que se traducen a JavaScript y se ejecutan en los navegadores

Page 66: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

66

Desarrollo de webs SPA

Lenguaje programación

ES5 ES6

Page 67: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

67

Desarrollo de webs SPA

Lenguaje programación

ES5 ES6

Page 68: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

68

Desarrollo de webs SPA

Frameworks / librerías SPA

Page 69: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

69

Desarrollo de webs SPA

Frameworks / librerías SPA

Page 70: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

70

Desarrollo de webs SPA

+

Page 71: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

71

Page 72: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

72

TypeScript

Características● Añade tipos estáticos a JavaScript ES6

● Inferencia de tipos● Tipos opcionales

● El compilador genera código JavaScript ES5 (compatible con los navegadores web actuales)

● Orientado a Objetos con clases (no como ES5)

● Anotaciones

http://www.typescriptlang.org/

Page 73: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

73

TypeScript

Ventajas frente a JavaScript● Con el tipado estático el compilador puede verificar

la corrección de muchas más cosas que con el tipado dinámico

● Los programas grandes son menos propensos a errores

● Los IDEs y editores pueden: Autocompletar, Refactorizar, Navegar a la definición

● Muy parecido a Java y C#

Page 74: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

74

TypeScript

Facilidad de adopción para JavaScripters● Los tipos son opcionales● La inferencia de tipos permite no tener que

escribir los tipos constantemente● En realidad es JavaScript con más cosas, así que

todo lo conocido se puede aplicar● Un mismo proyecto puede combinar JS y TS, lo

que facilita migrar un proyecto existente

Page 75: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

75

TypeScriptexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

TypeScript

Page 76: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

76

TypeScript

TypeScript vs JavaScript ES5

export class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

function Empleado(nombre, salario){

this.nombre = nombre; this.salario = salario;}

Empleado.prototype.getNombre = function(){ return nombre;}; Empleado.prototype.toString = function(){ return "Nombre:"+this.nombre+", Salario:"+this.salario;};

Simulación de clase en JS ES5 con prototipos

Page 77: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

77

TypeScript

Java vs TypeScript

public class Empleado { private String nombre; private double salario;

public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; }

public String getNombre(){ return nombre; }

public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; }}

Clase en Javaexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

Page 78: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

78

TypeScript

Java vs TypeScript

public class Empleado { private String nombre; private double salario;

public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; }

public String getNombre(){ return nombre; }

public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; }}

Clase en Javaexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

Page 79: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

79

TypeScript

Java vs TypeScript

public class Empleado { private String nombre; private double salario;

public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; }

public String getNombre(){ return nombre; }

public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; }}

Clase en Javaexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

Page 80: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

80

TypeScript

Java vs TypeScript

public class Empleado { private String nombre; private double salario;

public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; }

public String getNombre(){ return nombre; }

public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; }}

Clase en Javaexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

Page 81: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

81

TypeScript

Java vs TypeScript

public class Empleado { private String nombre; private double salario;

public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; }

public String getNombre(){ return nombre; }

public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; }}

Clase en Javaexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

Page 82: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

82

TypeScript

Java vs TypeScript

public class Empleado { private String nombre; private double salario;

public Empleado(String nombre, double salario){ this.nombre = nombre; this.salario = salario; }

public String getNombre(){ return nombre; }

public String toString(){ return "Nombre:"+nombre+ ", Salario:"+salario; }}

Clase en Javaexport class Empleado {

private nombre:string; private salario:number;

constructor(nombre:string, salario:number){ this.nombre = nombre; this.salario = salario; }

getNombre(){ return this.nombre; }

toString(){ return "Nombre:"+this.nombre+ ", Salario:"+this.salario; }}

Clase en TypeScript

Page 83: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

83

TypeScript

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

Page 84: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

84

TypeScript

Java vs TypeScript

List<Empleado> emps = new ArrayList<>();

emps.add(new Empleado('Pepe', 500));emps.add(new Empleado('Juan', 200));

for(Empleado emp : emps){ System.out.println(emp.getNombre());}

empleados.forEach(emp -> { System.out.println(emp);});

Java

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

Page 85: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

85

TypeScript

Java vs TypeScript

List<Empleado> emps = new ArrayList<>();

emps.add(new Empleado('Pepe', 500));emps.add(new Empleado('Juan', 200));

for(Empleado emp : emps){ System.out.println(emp.getNombre());}

empleados.forEach(emp -> { System.out.println(emp);});

Java

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

En Java las clases de la misma carpeta se pueden usar sin importar. En TypeScript se tienen que importar

Page 86: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

86

TypeScript

Java vs TypeScript

List<Empleado> emps = new ArrayList<>();

emps.add(new Empleado('Pepe', 500));emps.add(new Empleado('Juan', 200));

for(Empleado emp : emps){ System.out.println(emp.getNombre());}

empleados.forEach(emp -> { System.out.println(emp);});

Java

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

En Java usamos List y ArrayList del SDK.En TypeScript usamos el Array nativo de JavaScript

Page 87: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

87

TypeScript

Java vs TypeScript

List<Empleado> emps = new ArrayList<>();

emps.add(new Empleado('Pepe', 500));emps.add(new Empleado('Juan', 200));

for(Empleado emp : emps){ System.out.println(emp.getNombre());}

empleados.forEach(emp -> { System.out.println(emp);});

Java

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

En Java List el método es “add”En TypeScript Array el método es “push”

Page 88: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

88

TypeScript

Java vs TypeScript

List<Empleado> emps = new ArrayList<>();

emps.add(new Empleado('Pepe', 500));emps.add(new Empleado('Juan', 200));

for(Empleado emp : emps){ System.out.println(emp.getNombre());}

empleados.forEach(emp -> { System.out.println(emp);});

Java

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

Page 89: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

89

TypeScript

Java vs TypeScript

List<Empleado> emps = new ArrayList<>();

emps.add(new Empleado('Pepe', 500));emps.add(new Empleado('Juan', 200));

for(Empleado emp : emps){ System.out.println(emp.getNombre());}

empleados.forEach(emp -> { System.out.println(emp);});

Java

import { Empleado } from "./Empleado";

let emps = new Array<Empleado>();

emps.push(new Empleado('Pepe', 500));emps.push(new Empleado('Juan', 200));

for(let emp of emps){ console.log(emp.getNombre());}

empleados.forEach(emp => { console.log(emp);});

TypeScript

Page 90: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

90

TypeScript

Editores / IDEsHay plugins para la mayoría de los editores / IDEs

Sublime Text Visual Studio Code WebStorm

Page 91: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

91

TypeScript

Editores / IDEsHay plugins para la mayoría de los editores / IDEs

Sublime Text Visual Studio Code WebStorm

Page 92: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

92

WebStorm 11

Page 93: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

93

WebStorm 11

Page 94: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

94

WebStorm 11

Page 95: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

95

Angular 2

Page 96: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

96

Angular 2

Características● Angular es un framework para desarrollo SPA● Permite extender el HTML con etiquetas propias

● Con contenido personalizado (HTML)● Con comportamiento personalizado (JavaScript)

● Interfaz basado en componentes (no en páginas)● Se recomienda usar con TypeScript (aunque se

puede con ES5 y ES6)● Inyección de dependencias

https://angular.io/

Page 97: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

97

Angular 2

Angular 2 vs Angular 1● Está en beta (Feb 2016)

● Está implementado desde cero, no como una evolución de Angular 1

● Angular 2 no es compatible con Angular 1

● Cuidado, la documentación de Angular 1 no sirve para Angular 2

$scope

Page 98: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

98

Angular 2

Componente <app>

<!DOCTYPE html><html> <head> <!-- Scripts and libs --> </head> <body>

<app>Loading...</app>

</body></html>

index.htmlimport {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { }

app.component.ts

<h1>My First Angular 2 App</h1>

app.html

Uso del componente Implementación del componente

Page 99: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

99

Angular 2

Componente <app>

<!DOCTYPE html><html> <head> <!-- Scripts and libs --> </head> <body>

<app>Loading...</app>

</body></html>

index.htmlimport {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { }

app.component.ts

<h1>My First Angular 2 App</h1>

app.html

Uso del componente Implementación del componente

Elemento del Componente

Page 100: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

100

Angular 2

Componente <app>

<!DOCTYPE html><html> <head> <!-- Scripts and libs --> </head> <body>

<app>Loading...</app>

</body></html>

index.htmlimport {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { }

app.component.ts

<h1>My First Angular 2 App</h1>

app.html

Uso del componente Implementación del componente

HTML del Componente

Page 101: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

101

Angular 2

Componente <app>

<!DOCTYPE html><html> <head> <!-- Scripts and libs --> </head> <body>

<app>Loading...</app>

</body></html>

index.htmlimport {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { }

app.component.ts

<h1>My First Angular 2 App</h1>

app.html

Uso del componente Implementación del componente

Lógica del Componente

Page 102: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

102

Angular 2

Componente <app>

Page 103: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

103

Angular 2

Componente dinámicoLa vista del componente (HTML) se genera en función

de su estado (atributos de la clase)

import {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { name = 'Anybody'; }

app.component.ts

<h1>Hello {{name}}!</h1>

app.html

Page 104: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

104

Angular 2

Componente dinámicoLa vista del componente (HTML) se genera en función

de su estado (atributos de la clase)

import {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { name = 'Anybody'; }

app.component.ts

<h1>Hello {{name}}!</h1>

app.html

Page 105: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

105

Angular 2

Datos enlazados (data binding)Un campo de texto se puede “enlazar” a un atributo

para que los cambios se reflejen al escribir

import {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { name = 'Anybody'; }

app.component.ts<input type="text" [(ngModel)]="name">

<h1>Hello {{name}}!</h1>

app.html

Page 106: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

106

Angular 2

Datos enlazados (data binding)Un campo de texto se puede “enlazar” a un atributo

para que los cambios se reflejen al escribir

import {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { name = 'Anybody'; }

app.component.ts<input type="text" [(ngModel)]="name">

<h1>Hello {{name}}!</h1>

app.html

Page 107: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

107

Angular 2

Ejecución de lógicaSe puede ejecutar un método ante un evento

producido en el componente

import {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { name = 'Anybody';

setName(name:string){ this.name = name; } }

app.component.ts

<input type="text" [(ngModel)]="name">

<h1>Hello {{name}}!</h1>

<button (click)="setName('John')"> Hello John</button>

app.html

Page 108: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

108

Angular 2

Ejecución de lógicaSe puede ejecutar un método ante un evento

producido en el componente

import {Component} from 'angular2/core';

@Component({selector: 'app',templateUrl: 'app.html'

})export class AppComponent { name = 'Anybody';

setName(name:string){ this.name = name; } }

app.component.ts

<input type="text" [(ngModel)]="name">

<h1>Hello {{name}}!</h1>

<button (click)="setName('John')"> Hello John</button>

app.html

Page 109: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

109

Angular 2

Ejecución de lógicaSe puede ejecutar un método ante un evento

producido en el componente

Page 110: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

110

Angular 2

Aplicaciones básicasEstas características son el núcleo de Angular 2 y

permiten implementar apps sencillas

Page 111: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

111

Angular 2

Árboles de componentesEn Angular 2 un componente está formado por más

componentes formando un árbol

App

Header FooterMain

Comp1 Comp2

Page 112: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

112

Angular 2

Árboles de componentesEn Angular 2 un componente está formado por más

componentes formando un árbol

App

Header FooterMain

Comp1 Comp2

Page 113: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

113

Angular 2

Árboles de componentes App

Header

import {Component} from 'angular2/core';import {HeaderComponent} from './header.component';

@Component({selector: 'app',templateUrl: 'app.html',

directives: [HeaderComponent]})export class AppComponent {}

app.component.ts

<header></header>

app.html

import {Component} from 'angular2/core';

@Component({selector: 'header',templateUrl: 'header.html'

})export class HeaderComponent {}

header.component.ts

<h1>Hello Angular 2 App</h1>

header.html

Page 114: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

114

Angular 2

Árboles de componentes App

Header

import {Component} from 'angular2/core';import {HeaderComponent} from './header.component';

@Component({selector: 'app',templateUrl: 'app.html',

directives: [HeaderComponent]})export class AppComponent {}

app.component.ts

<header></header>

app.html

import {Component} from 'angular2/core';

@Component({selector: 'header',templateUrl: 'header.html'

})export class HeaderComponent {}

header.component.ts

<h1>Hello Angular 2 App</h1>

header.htmlHay que indicar los componentes que se usan en el template

Page 115: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

115

Angular 2

Árboles de componentes App

Header

import {Component} from 'angular2/core';import {HeaderComponent} from './header.component';

@Component({selector: 'app',templateUrl: 'app.html',

directives: [HeaderComponent]})export class AppComponent {}

app.component.ts

<header></header>

app.html

import {Component} from 'angular2/core';

@Component({selector: 'header',templateUrl: 'header.html'

})export class HeaderComponent {}

header.component.ts

<h1>Hello Angular 2 App</h1>

header.htmlEn TypeScript hay que

importar todas las clases que se usen (aunque

sean de la misma app)

Page 116: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

116

Angular 2

Angular 2 es mucho más● Inyección de dependencias● Servicios● Navegación por la app (Router)● Cliente http (APIs REST)● Animaciones● Internacionalización● Testing● Librerías de componentes: Material Design● ...

Page 117: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

117

Page 118: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

118

Ionic 2

● Desarrollo apps móviles● Plataformas principales: Android, iOS, Windows

Phone● Cada plataforma móvil tiene su propia tecnología de

desarrollo● Diferentes lenguajes, entornos, librerías● Alto coste de desarrollo apps multiplataforma

Page 119: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

119

Ionic 2

● Apps híbridas● Aplicaciones implementadas con tecnologías web

(HTML, CSS y JS)● Se instalan y actualizan como una app normal● Acceden a los recursos del dispositivo con plugins

nativos

Page 120: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

120

Ionic 2

● Las apps nativas…● Se integran mejor con el

sistema operativo● Aprovechan mejor las

funcionalidades de los dispositivos

● Pueden tener mejor rendimiento

● Las apps híbridas…● Son mucho más fáciles de

desarrollar (tecnologías web)

● Un mismo código, múltiples plataformas

● Pueden compartir parte del código con webs SPA

Apps nativas vs híbridas

Page 121: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

121

Ionic 2

Frameworks apps híbridas

Page 122: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

122

Ionic 2

● ¿Qué es ionic 2?● Es un framework de desarrollo de apps para móviles y

tablets● Con tecnologías web (HTML, CSS y JavaScript)● Basado en Angular 2● La misma app se ejecuta en Android y iOS● Basado en Apache Cordova

http://ionicframework.com/

Page 123: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

123

Ionic 2

App básicaAngular 2 con anotaciones nuevas y

componentes predefinidos

@Page({ templateUrl: 'profile.html' }) export class Profile {

first = 'Biff'; last = 'Tannen';

}

<ion-navbar> <ion-title>Profile</ion-title></ion-navbar>

<ion-content> {{first}} {{last}}</ion-content>

profile.page.ts profile.html

Page 124: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

124

Ionic 2

Componentes para móviles

● Ionic 2 ofrece una librería de componentes para móviles

● La misma app se ve y se comporta diferente en Android y en iOS

Page 125: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

125

Ionic 2

Page 126: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

126

La nueva web está aquí

Page 127: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

127

La nueva web está aquí

● Las tecnologías web han madurado mucho en los últimos años

● Los navegadores son cada vez más eficientes y compatibles entre sí

● Los nuevos lenguajes como ES6 y TypeScript permiten el desarrollo de grandes aplicaciones

● Los frameworks SPA como Angular 2 facilitan el desarrollo de aplicaciones complejas

● Las tecnologías web son la plataforma de desarrollo universal

Page 128: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

128

¿Preguntas?Gracias...

Page 129: Desarrollo web front-end con TypeScript, Angular 2 e Ionic

Micael [email protected]@micael_gallego

Desarrollo web frontend

con