Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Angular 8 Diapositivas
Angular 8 Diapositivas
aplicaciones innovadoras y
escalables
IFC0219CL
Temario
1. Introducción a JavaScript y Angular 7 4. Componentes
Repaso de JS Metadatos de componentes
¿Por qué Angular? Creación de un componente
Ventajas Data binding
Características
Anidado de componentes
Instalación
Creación de proyecto Pasando datos al componente
2. ES8 Respondiendo a eventos
Clases Ciclo de Vida
Arrow Functions Estilos
Ámbito 5. Directivas y servicios
Operador de programación
Attribute Directives
Argumentos variables
Structural Directives
Características
Valores por defecto de los parámetros Procesado de recursos
Destructuring Clientes RESTful
3. TypeScript 6. Routing
TSC Introducción
Types Imports del Router
Funciones Configuración
Interfaces Router Outlet
Decoradores Router Links
Rutas con parámetros
Usando los parámetros del padre
Router Guards
Temario
7. Formularios 9. HTTP
Introducción Introducción
Formularios basados en plantillas Implementación
Crear Formulario Obteniendo datos JSON
Crear componente del formulario Por qué implementar un servicio
Revisar app.module.ts Verificación de tipo de respuesta
Crear una plantilla HTML inicial Leyendo la respuesta completa
Añadir selector con directivas Manejar errores
Controlar estado y validez Obtener los detalles del error
Enviar formulario con ngSubmit RetryObservables y operadores
8. Pipes Petición de datos no JSON
DatePipe Enviar datos al servidor
DecimalPipe Petición POST
CurrencyPipe Petición DELETE
LowerCasePipe y UpperCasePipe Petición PUT
JSONpipe Alternativa axios
PercentPipe y SlicePipe 10. Testing
Testing
Karma
Testing a componentes
11. Animaciones
1. Translate
2. Rotate
3. Scale
4. Animaciones
Temario
12. Angular Material Design
Introducción
¿Qué es Material Design?
Instalación
Componentes
Buttons
Navigation – Menú
Menú Anidado
Navigation – Sidenav
Navigation – Toolbar
Posicionar toolbar content
Controles de formulario
Layout – Grid
Layout – Card
Componente Mat-table
13. Creación de un proyecto simple con Angular 7
Conexión a base de datos
Alta, baja y modificación y consulta de datos
Introducción a
Angular
¿Qué es Angular?
¿Qué es Angular?
Framework JS
¿Qué es Angular?
Framework JS
SPA: Single Page Applications
¿Qué es Angular?
Framework JS
SPA: Single Page Applications
TypeScript
¿Qué es Angular?
Framework JS
SPA: Single Page Applications
TypeScript
Código fuente y código compilado
¿Qué es Angular?
Framework JS
SPA: Single Page Applications
TypeScript
Código fuente y código compilado
¿Angular 2? ¿8? ¿AngularJS?
Entorno de
desarrollo
Entorno de desarrollo
IDE: Visual Studio Code
Spanish Language Pack for Visual Studio Code
EditorConfig for VS Code
TSLint
Angular Language Service
Configurar:
Format on Paste y Format on Save
"editor.codeActionsOnSave": {
"source.fixAll.tslint": true
}
Git
Node.js y npm
Extensión Augury para el navegador
Git
Comandos básicos
Comandos básicos
Clonar un repositorio:
Clonar un repositorio:
})
})(jQuery);
Organización del código JavaScript
Organización del código JavaScript
<head>
<meta charset="UTF-8">
<title>Mi web</title>
<script src="vendor/jquery/jquery.min.js"></script>
<script src="js/ui.js"></script>
</head>
Organización del código JavaScript
(function($) {
<head>
<meta charset="UTF-8">
<title>Mi
$(document).ready(function()
web</title> {
<script src="vendor/jquery/jquery.min.js"></script> 75 líneas
$(document).on('click', '.tab_new', offerGroupSwitchTabs);
<script src="js/ui.js"></script>
$(document).on('click', '.navigationServices-li', jumpTo);
</head> $('.load-more_new').on('click', loadMore).each(function() {
$(this).data('main', $(this).text());
});
})
// Tokenizer
Ventajas Inconvenientes
Organización del código JavaScript
Ventajas Inconvenientes
Difícil de leer/entender
Organización del código JavaScript
Ventajas Inconvenientes
Difícil de leer/entender
Difícil de mantener
Organización del código JavaScript
Ventajas Inconvenientes
Difícil de leer/entender
Difícil de mantener
Poca reusabilidad
Organización del código JavaScript
Ventajas Inconvenientes
Difícil de leer/entender
Difícil de mantener
Poca reusabilidad
Difícil encontrar código no
usado
Organización del código JavaScript
Ventajas Inconvenientes
Difícil de leer/entender
Difícil de mantener
Poca reusabilidad
Difícil encontrar código no
usado
Colisiones de nombres
Organización del código JavaScript
Ventajas Inconvenientes
Una sola petición Difícil de leer/entender
HTTP Difícil de mantener
Poca reusabilidad
Difícil encontrar código no
usado
Colisiones de nombres
Organización del código JavaScript
Organización del código JavaScript
Ventajas Inconvenientes
<head>
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Organización del código JavaScript: módulos
Module loaders: ellos gestionan las dependencias y
cargan los módulos (RequireJS, SystemJS)
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Ventajas Inconvenientes
Legible e inteligible
Fácil de mantener
Reutilizable
Cargamos sólo lo que
necesitamos
Gestión automática de
dependencias
Encapsulación
Organización del código JavaScript: módulos
Module bundlers: además de lo anterior, generan un
solo código encadenado y minificado (Browserify,
webpack, Parcel)
Ventajas
return {
hello: function() {
console.log('hello');
},
goodbye: function() {
console.log('goodbye');
}
};
});
Organización del código JavaScript: módulos
function myModuleB() {
this.hello = function() {
return 'hello!';
}
this.goodbye = function() {
return 'goodbye!';
}
}
module.exports = myModuleB;
Organización del código JavaScript: módulos
method1("hello");
const b = 10;
b = 3; // Error
const obj = {
x: 10,
y: 12
}
obj.x = 15; // OK
obj = { // Error
x: 15,
y: 12
}
ES6
let y const
Template literals
ES6
let y const
Template literals
let saludo1 = "Hola, " + nombre + ". El cuadrado de " + n + " es " + cuadrado(n) + ".
let saludo2 = `Hola, ${nombre}. El cuadrado de ${n} es ${cuadrado(n)}.`;
ES6
let y const
Template literals
for ... of
ES6
let y const
let nombres = ["Patricia", "Zacarías", "Miguel", "Maite
Template literals
for (let i in nombres) {
console.log(nombres[i]);
for ... of
}
let obj = {
x: 3,
y: 4
}
push y unshift
}
sumar(...nums);
Intercalar un array
// function(n
let a = 3;
dentro de otro
parámetros)
Copiar let
unbc array
let
= 7;
= 8; en otro
Copiar function
un objeto
let suma = 0;
en otro
sumar(...nums) {
for (n of nums) {
suma += n;
}
console.log("La suma es " + suma);
}
sumar(a, b, c);
// h hif
ES6
ES6
Destructuring
ES6
Destructuring
Asignar desde un array
ES6
Destructuring
Asignar desde un array
function medidasMueble() {
// ...
// 100, 70, 20
ES6
Destructuring
Asignar desde un array
Asignar desde un objeto
ES6
Destructuring
Asignar desde un array
function getRGB(colorHex) {
// ...
Asignar desde
return { un objeto
alias: 'deeppink',
red: 255,
green: 20,
blue: 147,
alpha: 0.8
}
}
{
nombre: "Marta",
apellido: "Nieto",
edad: 29
}];
let { mat: matematicas, fis: fisica, dib: dibujo, tec: tecnologia } = not
// 8, 6, 5, 6
ES6
Destructuring
Asignar desde un array
Asignar desde un objeto
Renombrar variables
Valores por defecto
ES6
Destructuring
Asignar desde un array
Asignarletdesde
persona un
= { objeto
nombre: "Luis",
Renombrar
}
variables
edad: 23
Valoresletpor defecto
{ nombre, edad, estado = "soltero" } = persona
Intercambiar variables
ES6
Destructuring
Asignar desde un array
Asignar desde un objeto
Renombrar variables
Valores por defecto
Nested destructuring
Intercambiar variables
Argumentos en las funciones
ES6
Destructuring
Asignar desde un array
Asignar desde un objeto
function area({radio = 0, base = 0, altura = 0, tipo = 'circulo'} = {
Renombrar variables
}
console.log(radio, base, altura, tipo);
Nested destructuring
area();
// 0, 0, 0, "circulo"
Intercambiar variables
Argumentos en las funciones
ES6
ES6
Clases
ES6
Clases
Propiedades y métodos
ES6
Clases
Propiedades
class A { y métodos
constructor(z) {
this.x = 3;
this.y = 10;
this.z = z;
}
suma() {
return this.x + this.y + this.z;
}
console.log(a.suma());
ES6
Clases
Propiedades y métodos
Getters y setters
ES6
Clases class A {
Propiedadesthis.x
y métodos
constructor(z) {
= 3;
this.y = 10;
Getters y }setters
this.z = z;
suma() {
return this.x + this.y + this.z;
}
set zeta(z) {
this.z = z * 2;
}
get zeta() {
return this.z / 2;
}
}
a.zeta = 15;
console.log(a.zeta);
ES6
Clases
Propiedades y métodos
Getters y setters
Métodos estáticos
class A {
ES6 constructor(z) {
this.x = 3;
this.y = 10;
Clases }
this.z = z;
Propiedades y getPI()
static métodos {
return 3.14159;
Getters y }setters
suma() {
Métodos estáticos
return this.x + this.y + this.z;
}
set zeta(z) {
this.z = z * 2;
}
get zeta() {
return this.z / 2;
}
}
a.zeta = 15;
console.log(a.zeta);
console.log(A.getPI());
ES6
Clases
Propiedades y métodos
Getters y setters
Métodos estáticos
Herencia con extends y super()
class A {
ES6 constructor(z) {
this.x = 3;
this.y = 10;
this.z = z;
Clases }
Propiedades y métodos
static getPI() {
return 3.14159;
}
Getters y suma()
setters{
Métodos estáticos
return this.x + this.y + this.z;
}
get zeta() {
return this.z / 2;
}
}
class B extends A {
constructor() {
super(100);
this.x = 20;
}
suma() {
return this.x + this.z;
}
ES6
ES6
Módulos
import
import { literal } from 'ruta_modulo';
import literal from 'ruta_modulo';
import * as literal from 'ruta_modulo';
import 'ruta_modulo';
export
export let a = 3;
export let class Clase {
...
}
export default {
key: value
}
ES6
ES6
Módulos
import dinámicos
import('ruta_modulo').then(
modulo => ...
);
Programación funcional con arrays
Métodos:
map
Programación funcional con arrays
Métodos:
map let nombres = ["juan", "luisa", "amparo", "arturo"];
console.log(nombres);
Programación funcional con arrays
Métodos:
map
filter
Programación funcional con arrays
Métodos:
let personas = [
{
map nombre: "juan",
edad: 15
filter {
},
nombre: "luisa",
edad: 35
},
{
nombre: "amparo",
edad: 17
},
{
nombre: "arturo",
edad: 32
}
];
console.log(mayoresEdad);
Programación funcional con arrays
Métodos:
map
filter
reduce
Programación funcional con arrays
Métodos:
let nums = [2, 4, 10, 15, 12];
map
let suma = nums.reduce((x, y) => x + y);
filter
let objs =
{
[
reduce3,
2
x:
y:
},
{
x: 8,
y: 10
},
{
x: 10,
y: 15
}
]
Métodos:
map
filter
reduce
find
Programación funcional con arrays
Métodos:
let notas = [
{
map nombre: "juan",
nota: 6
filter
},
{
nombre: "luisa",
reduce
},
nota: 8
Métodos:
map
filter
reduce
find
Encadenamiento
Programación funcional con arrays
Métodos:
let notas = [
{
map nombre: "juan",
nota: 6
filter
},
{
nombre: "luisa",
reduce
},
nota: 8
console.log(notasAprobados);
TypeScript
TypeScript
TypeScript
Superconjunto de JavaScript
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
Tipado
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
Tipado
Errores en tiempo de compilación
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
Tipado
Errores en tiempo de compilación
TypeScript
Superconjunto de JavaScript
Transpila a ES5 (o a otra versión)
Tipado
Errores en tiempo de compilación
tsconfig.json
TypeScript
Superconjunto de JavaScript
Transpila {a "compilerOptions":
ES5 (o a otra versión)
{
Tipado
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
Errores en tiempo de compilación
"sourceMap": true,
"outDir": "./public/js/",
tsconfig.json
}
}
tsconfig.json
TypeScript - Tipos
TypeScript - Tipos
Tipos básicos:
TypeScript - Tipos
Tipos básicos:
number
TypeScript - Tipos
Tipos básicos:
number
string
TypeScript - Tipos
Tipos básicos:
number
string
boolean
TypeScript - Tipos
Tipos básicos:
number
string
boolean
Array
TypeScript - Tipos
Tipos básicos:
number
string
boolean
Array
any
TypeScript - Tipos
Tipos básicos:
number
string
boolean
Array
any
void
TypeScript - Tipos
Tipos básicos:
let peso: number;
peso = 89.5;
number
let saludo: string;
saludo = 'Vais a petarlo con TypeScript';
stringlet esVerano: boolean;
Tipos básicos:
number
string
boolean
Array
any
void
Enum
TypeScript - Tipos
Tipos básicos:
number
enum FormasPago
TPV,
{
string
PayPal,
transferencia
}
boolean let pago: FormasPago;
Tipos básicos:
number
string
boolean
Array
any
void
Enum
Union types
TypeScript - Tipos
Tipos básicos:
number
let numeros: Array<number | string>;
numeros = ['3', 6, '15.8', 0];
}
any
void
Enum
Union types
TypeScript - Tipos
Tipos básicos:
number
string
boolean
Array
any
void
Enum
Union types
Genéricos
TypeScript - Tipos
Tipos básicos:
number
string
boolean
function verDoble<T>(elem: T): T[] {
let elemDoble: T[] = [elem, elem];
Array }
return elemDoble;
any
void
Enum
Union types
Genéricos
TypeScript - Tipos
Tipos básicos:
number
string
boolean
Array
any
void
Enum
Union types
Genéricos
Type assertion
TypeScript - Tipos
Tipos básicos:
number
string
boolean
const inputText = <HTMLInputElement>document.getElementById("nombr
Array
inputText.select();
any
void
Enum
Union types
Genéricos
Type assertion
TypeScript - Funciones
TypeScript - Funciones
sumar(); // Error
sumar(3); // Error
sumar(10, 2); // OK
sumar(4, -3, 10, 8) // Error
TypeScript - Funciones
sumar(10, 2);
sumar(10, 2, 15);
TypeScript - Funciones
Sobrecarga
}
Sintaxis ES6:
import { literal } from 'ruta_modulo';
import literal from 'ruta_modulo';
import * as literal from 'ruta_modulo';
import 'ruta_modulo';
export let a = 3;
export class Clase {
...
}
export default {
key: value
}
TypeScript - Módulos
TypeScript - Módulos
Módulos
import dinámicos
import('ruta_modulo').then(
modulo => ...
);
TypeScript - Módulos
TypeScript - Módulos
Sintaxis ES6
TypeScript - Módulos
Sintaxis ES6
Se omite la extensión .ts
TypeScript - Módulos
Sintaxis ES6
Se omite la extensión .ts
Importar de paquetes npm: nombre del paquete
import { } from 'paquete';
TypeScript - Módulos
Sintaxis ES6
Se omite la extensión .ts
Importar de paquetes npm: nombre del paquete
import { } from 'paquete';
Importar de nuestros módulos: rutas relativas
import { } from './modulo';
TypeScript - Clases
TypeScript - Clases
Getters y setters
private readonly intTipoIva: number;
Modificador readonly
constructor(base: number, tipoIva: number = 21) {
this.base = base;
Propiedades estáticas
this.intTipoIva = tipoIva;
}
f.numero = 'AB600';
console.log(f.numero);
TypeScript - Clases
Getters y setters
public manual: boolean;
Modificador readonly
constructor(public ruedas: number, public motor: Motor)
this.manual = this.motor === Motor.ninguno;
Propiedades estáticas
}
Métodos abstractos
public abstract arrancar(): void;
Propiedades fuera
void; del constructor
interface Arrancable {
arrancar():
Visibilidad
} de los miembros
apagar(): void;
Getters y setters
abstract class Vehiculo {
Modificador readonly
public manual: boolean;
Propiedades estáticas
constructor(public ruedas: number, public motor: Motor) {
Métodos abstractos
this.manual = this.motor === Motor.ninguno;
}
Interfaces
}
Propiedades fuera
void; del constructor
interface Arrancable {
arrancar():
Visibilidad
} de los miembros
apagar(): void;
interface Cliente {
Getters y setters
abstract
id: number;
class Vehiculo {
login: string;
Modificador readonly
nombre:
public manual:
string;
boolean;
tipo: TiposCliente;
Propiedades estáticas
fechaAlta:
constructor(public
}
Date;
ruedas: number, public motor: Motor) {
Métodos abstractos
this.manual = this.motor === Motor.ninguno;
}
function getClientes(): Cliente[] {
Interfaces
}
let clientes: Cliente[] = conectaBD('clientes');
return clientes;
}
class Bici extends Vehiculo implements Arrancable {
public arrancar(): void {
console.log('Me pongo de pie y pedaleo');
}
public apagar(): void {
console.log('Me bajo de la bici');
}
}
TypeScript - Decoradores
TypeScript - Decoradores
@
TypeScript - Decoradores
@
Asignar metadatos
TypeScript - Decoradores
@
Asignar metadatos
Muy utilizados en Angular
TypeScript - Decoradores
@
Asignar metadatos
import { Component, Input } from '@angular/core'
Muy utilizados en Angular
@Component({
selector: 'app-factura',
templateUrl: './factura.component.html',
styleUrls: ['./factura.component.css']
})
export class FacturaComponent {
@Input()
facturaId: number;
}
Angular
Primeros pasos
Primeros pasos
Generar la app:
ng new <nombre-app> --prefix <prefijo>
Primeros pasos
Generar la app:
ng new <nombre-app> --prefix <prefijo>
Ejecutar la app y verla en el navegador:
ng serve -o
Primeros pasos
Generar la app:
ng new <nombre-app> --prefix <prefijo>
Ejecutar la app y verla en el navegador:
ng serve -o
Entornos dev y prod
Primeros pasos
Generar la app:
ng new <nombre-app> --prefix <prefijo>
Ejecutar la app y verla en el navegador:
ng serve -o
Entornos dev y prod
Archivos de configuración
Módulos: contenedores lógicos
Componentes
Divisiones de la UI
Tienen clase y template
Primeros pasos
Generar la app:
ng new <nombre-app> --prefix <prefijo>
Ejecutar la app y verla en el navegador:
ng serve -o
Entornos dev y prod
Archivos de configuración
Módulos: contenedores lógicos
Componentes
Divisiones de la UI
Tienen clase y template
Creando piezas:
ng generate <tipo-pieza> <nombre-pieza> [params]
Esqueleto de una pieza en Angular
Esqueleto de una pieza en Angular
clase =>
Esqueleto de una pieza en Angular
clase =>
=> clase exportada =>
Esqueleto de una pieza en Angular
clase =>
=> clase exportada =>
=> clase decorada =>
Esqueleto de una pieza en Angular
clase =>
=> clase exportada =>
=> clase decorada =>
=> dependencias
Examinando un módulo
Examinando un módulo
Metadata
Examinando un módulo
Metadata
declarations:
- componentes, directivas y pipes del módulo
Examinando un módulo
Metadata
declarations:
- componentes, directivas y pipes del módulo
imports:
- otros módulos cuyos componentes, directivas o
pipes exportados queremos usar
exports:
- componentes, directivas o pipes que exponemos
para que los usen otros módulos
providers:
- objetos inyectables que están disponibles para el
inyector del módulo
Examinando un módulo
Metadata
declarations:
- componentes, directivas y pipes del módulo
imports:
- otros módulos cuyos componentes, directivas o
pipes exportados queremos usar
exports:
- componentes, directivas o pipes que exponemos
para que los usen otros módulos
providers:
- objetos inyectables que están disponibles para el
inyector del módulo
bootstrap:
- componente(s) inicial de la app
Examinando un componente
Examinando un componente
Metadata
Examinando un componente
Metadata
selector:
Selector CSS que se corresponde con una etiqueta
HTML
Examinando un componente
Metadata
selector:
Selector CSS que se corresponde con una etiqueta
HTML
template / templateUrl:
String con el HTML / fichero con el HTML
Examinando un componente
Metadata
selector:
Selector CSS que se corresponde con una etiqueta
HTML
template / templateUrl:
String con el HTML / fichero con el HTML
styles / styleUrls:
Strings con los estilos / ficheros con los estilos
Examinando un componente
Metadata
selector:
Selector CSS que se corresponde con una etiqueta
HTML
template / templateUrl:
String con el HTML / fichero con el HTML
styles / styleUrls:
Strings con los estilos / ficheros con los estilos
ngOnInit
Componente inicializado (con su vista renderizada y
sus valores cargados), se usa para los procesos
iniciales (no usar el constructor).
Examinando un componente
Metadata
selector:
Selector CSS que se corresponde con una etiqueta
HTML
template / templateUrl:
String con el HTML / fichero con el HTML
styles / styleUrls:
Strings con los estilos / ficheros con los estilos
ngOnInit
Componente inicializado (con su vista renderizada y
sus valores cargados), se usa para los procesos
iniciales (no usar el constructor).
ngOnDestroy
Examinando un template
Examinando un template
Custom elements
Examinando un template
Custom elements
Data binding
Examinando un template
Custom elements
Data binding
Interpolation
Examinando un template
Custom elements
Data binding
Interpolation
Property binding
Examinando un template
Custom elements
Data binding
Interpolation
Property binding
Class & style binding
Examinando un template
Custom elements
Data binding
Interpolation
Property binding
Class & style binding
Event binding
Examinando un template
Custom elements
Data binding
Interpolation
Property binding
Class & style binding
Event binding
Two-way binding
Examinando un template
Examinando un template
Directivas de atributo
Examinando un template
Directivas de atributo
ngClass
Examinando un template
Directivas de atributo
ngClass
ngStyle
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
ngSwitch
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
ngSwitch
Pipes
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
ngSwitch
Pipes
@Pipe, PipeTransform
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
ngSwitch
Pipes
@Pipe, PipeTransform
Directivas propias
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
ngSwitch
Pipes
@Pipe, PipeTransform
Directivas propias
De atributo (ElementRef.nativeElement)
Examinando un template
Directivas de atributo
ngClass
ngStyle
Directivas estructurales
ngIf
ngFor
ngSwitch
Pipes
@Pipe, PipeTransform
Directivas propias
De atributo (ElementRef.nativeElement)
Estructurales (ViewContainerRef y TemplateRef)
Servicios
Servicios
Dependency Injection:
Proveedores y jerarquía de inyectores
Servicios
Dependency Injection:
Proveedores y jerarquía de inyectores
Injectable()
Servicios
Dependency Injection:
Proveedores y jerarquía de inyectores
Injectable()
Singleton: tiene como ámbito su inyector y todos sus
inyectores hijos.
Formularios
Formularios
Asincronía
Conexiones con el servidor
Asincronía
Observables
Conexiones con el servidor
Asincronía
Observables
Suscripciones
Conexiones con el servidor
Asincronía
Observables
Suscripciones
API REST
Conexiones con el servidor
Asincronía
Observables
Suscripciones
API REST
El módulo HttpClientModule
Conexiones con el servidor
Asincronía
Observables
Suscripciones
API REST
El módulo HttpClientModule
Módulo HttpClientModule y servicio HttpClient
Conexiones con el servidor
Asincronía
Observables
Suscripciones
API REST
El módulo HttpClientModule
Módulo HttpClientModule y servicio HttpClient
Métodos del servicio HttpClient:
get(), post(), put(), patch(), delete()
Conexiones con el servidor
Asincronía
Observables
Suscripciones
API REST
El módulo HttpClientModule
Módulo HttpClientModule y servicio HttpClient
Métodos del servicio HttpClient:
get(), post(), put(), patch(), delete()
Obteniendo la respuesta completa:
{ observe: 'response' }
Conexiones con el servidor
Asincronía
Observables
Suscripciones
API REST
El módulo HttpClientModule
Módulo HttpClientModule y servicio HttpClient
Métodos del servicio HttpClient:
get(), post(), put(), patch(), delete()
Obteniendo la respuesta completa:
{ observe: 'response' }
Interceptors y autentificación
Navegación por la app
Navegación por la app
El router
Navegación por la app
El router
El RouterOutlet
Navegación por la app
El router
El RouterOutlet
Las rutas
Navegación por la app
Navegación por la app
El router
Navegación por la app
El router
El RouterOutlet
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Parámetros: los observables paramMap y data de
ActivatedRoute
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Parámetros: los observables paramMap y data de
ActivatedRoute
Guards y resolvers
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Parámetros: los observables paramMap y data de
ActivatedRoute
Guards y resolvers
Links de navegación: routerLink y routerLinkActive
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Parámetros: los observables paramMap y data de
ActivatedRoute
Guards y resolvers
Links de navegación: routerLink y routerLinkActive
router.navigate()
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Parámetros: los observables paramMap y data de
ActivatedRoute
Guards y resolvers
Links de navegación: routerLink y routerLinkActive
router.navigate()
Lazy loading
Navegación por la app
El router
El RouterOutlet
Las rutas
Página por defecto
404
Parámetros: los observables paramMap y data de
ActivatedRoute
Guards y resolvers
Links de navegación: routerLink y routerLinkActive
router.navigate()
Lazy loading
El servicio Title
Despliegue a producción
Despliegue a producción