Inicio del curso

1

De qu茅 tratar谩 este curso sobre Angular 4

Introducci贸n a Angular 4

2

Versionamiento en Angular

3

驴Qu茅 es Angular? Versiones y ventajas

4

Typescript: qu茅 es

5

Introducci贸n al Proyecto: PlatziSquare!

Setup del Ambiente de Trabajo

6

Herramientas de trabajo y Angular CLI

7

Generaci贸n y estructura de Angular 4

8

RETO: Haz un cambio simple en el proyecto.

Conceptos B谩sicos

9

Para qu茅 nos sirven los M贸dulos y Componentes

10

Tipos de Data Binding y String Interpolation

11

Property Binding

12

Event Binding

13

Two Way Data Binding

14

Directivas en Angular 4 y ngFor

15

Directiva ngIf

16

Instalando librer铆as con NPM (Google Maps)

Directivas

17

Directivas ngStyle y ngClass

18

Directiva ngSwitch

19

Directiva de atributo

20

Host Listeners

21

Host Binders

Angular UI

22

Angular Material y Bootstrap

23

Configurando e implementando Bootstrap en nuestro proyecto

Ruteo

24

Qu茅 hace el router en Angular 4

25

Implementaci贸n de Rutas en el Proyecto

26

Diferencias entre href y routerLink

27

Resaltando el link activo con CSS para indicar visualmente en que componente nos encontramos

28

Par谩metros en Rutas

29

Par谩metros tipo Query

30

Creando una vista de detalle para el proyecto

31

Creando la p谩gina de contacto para PlatziSquare

Servicios

32

Qu茅 son los servicios en Angular 4

33

Creando nuestro propio servicio

34

Configurando Firebase en nuestro proyecto

35

Guardando Records en Firebase

36

Obteniendo records desde Firebase

37

Obteniendo coordenadas usando Geocoding

38

Reto: Crear una vista para editar records

39

Mostrando marcadores en el Mapa de Google

Conexi贸n Remota (Http y Sockets)

40

Funcionamiento de los llamados Http y Sockets

41

Qu茅 es una arquitectura cliente - servidor

42

Enviando llamados tipo POST

43

Enviando llamados tipo GET

44

Formateando respuestas del servidor con el operador map()

45

Manejando errores HTTP

Pipes

46

Utilidad de los Pipes en Angular 4

47

Usando los pipes por defecto de Angular

48

Par谩metros en pipes

49

Creando nuestro propio pipe

Animaciones en Angular

50

Configurando animaciones en nuestro proyecto

51

Transiciones

52

Callbacks

53

Soluci贸n al Reto: A帽adiendo animaciones a nuestra aplicaci贸n

Testing en Angular

54

Introducci贸n a unit tests

55

Configuraci贸n de testing por default

56

Corriendo los tests

57

Creando unit tests para componentes

58

Integraci贸n de Unit Test con Servicios

Autenticaci贸n y Protecci贸n de Rutas

59

C贸mo funcionan los JSON Web Tokens

60

Preparaci贸n de vistas para login y registro

61

Registrando usuarios

62

Loggeando usuarios

63

Protecci贸n de Rutas

64

Autenticaci贸n con redes sociales.

65

Logout

RxJS

66

Qu茅 es RxJS

67

Configurando RxJS en nuestro proyecto

68

Uso de los Observables

69

Implementando un TypeAhead

70

Implementando un TypeAhead 2

71

Soluci贸n al reto autocompletar los campos de direcci贸n usando observables

Publicando nuestro proyecto

72

Publicando en Firebase Hosting

Fin del curso

73

Conclusi贸n 驴Qu茅 aprendimos en el curso?

74

Reto final del curso - realiza un nuevo modulo de PlatziSquare de acuerdo con las historias de usuario

Sesiones en vivo

75

Creando un traser bullet de PlatziSquare

76

Sesi贸n de preguntas y respuestas

77

Release de Angular 5

78

Sesi贸n de preguntas y respuestas

79

Angular Universal

Contenido Bonus

80

Actualizaci贸n de angular, versi贸n 6.0

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Angular 4

Curso de Angular 4

Eduardo Ibarra

Eduardo Ibarra

Creando una vista de detalle para el proyecto

30/80
Recursos

Aportes 15

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Solo como un comentario el class=鈥渨ell鈥 en la actual versi贸n de bootstrap 4+ fue sustituida por class=鈥渃ard card-body bg-light鈥

Como aporte, el tslint me recomienda usar === en la comparaci贸n del filter en vez de ==.

  buscarLugar() {
    return this.lugares.filter((lugar: any) => lugar.id === this.id )[0] || null;
  }

pero lugar.id es numbery this.id es string porque viene de la ruta del url. As铆 que this.id lo declaro como number y en el constructor le a帽ado el operador unario + a la asignaci贸n para convertirlo:

id: number = null;
this.id = +this.route.snapshot.params['id'];

La clase 鈥渨ell鈥 ah sido remplazada en bootstrap 4:
https://getbootstrap.com/docs/4.4/components/card/

Ejemplo de como lo maquete:

<div class="card border-secondary mb-3">
        <div class="card-header">{{ lugar.name}}</div>
        <div class="card-body text-secondary">
          <small> {{ lugar.distancia}} km.</small>
          <h5 class="card-title"> Subscripcion:  {{ lugar.plan}}</h5>
          <p class="card-text">{{ lugar.descripcion}}</p>
        </div>
   </div>

Estoy usando la extension 鈥淭sLing鈥 en Visual Studio Code y seg煤n la recomendaci贸n puedo reducir el 鈥渇ilter鈥 a:

return this.lugares.filter(lugar => lugar.id === parseInt(this.id))[0] || null;

hola buenos d铆as, tengo una duda: se me replica la vista en todos los componentes , osea veo el mapa al cambiar de componente en los links, que debo hacer?

este curso esta genial

Si no te imprime en la vista intenta usar este codigo en la funcion buscarLugar:

 buscarlugar(){
    return this.lugares.find(({id})=>
      id == this.id)
     || null
  }```

Estuvo muy interesante la clase!

en mi caso la variable la declare asi para que funcione
lugar:any ;

y me muestre el resultado

Help! por consaola recibo los parametros de query (action & referer) pero no alcanza a los valores de lugar鈥 alguien sabe como resolverlo ?

no me funciona mostar la informacion de detalle para cada ID. me muestra la misma informacion del id1, independiente a cual <a> le de click:

detalle.component.ts
import { Component } from 鈥楡angular/core鈥;
import { ActivatedRoute } from 鈥楡angular/router鈥;

@Component({
selector: 鈥榓pp-detalle鈥,
templateUrl: 鈥./detalle.component.html鈥
})
export class DetalleComponent {
lugares:any=[
{id: 1, plan: 鈥榩agado鈥, cercania: 1, distancia: 1, active: true, nombre:鈥楩lorer铆a la Gardenia鈥, description:鈥楧escripci贸n de este negocio鈥檥,
{id: 2, plan: 鈥榞ratuito鈥, cercania: 1, distancia: 1.8, active: true, nombre:鈥楧onas la pasadita鈥, description:鈥楧escripci贸n de este negocio鈥檥,
{id: 3, plan: 鈥榞ratuito鈥, cercania: 2, distancia: 5, active: true, nombre:鈥榁eterinaria la Vaquilla鈥, description:鈥楧escripci贸n de este negocio鈥檥,
{id: 4, plan: 鈥榞ratuito鈥, cercania: 3, distancia: 10, active: false, nombre:鈥楽ushi Sushiroll鈥, description:鈥楧escripci贸n de este negocio鈥檥,
{id: 5, plan: 鈥榩agado鈥, cercania: 3, distancia: 35, active: true, nombre:鈥楬otel la Gracia鈥, description:鈥楧escripci贸n de este negocio鈥檥,
{id: 6, plan: 鈥榞ratuito鈥, cercania: 3, distancia: 120, active: false, nombre:鈥榋apateria el Clavo鈥, description:鈥楧escripci贸n de este negocio鈥檥
];
id=null;

lugar:any= null;
constructor(private route: ActivatedRoute){
console.log(this.route.snapshot.params[鈥榠d鈥橾);
console.log(this.route.snapshot.queryParams[鈥榓ction鈥橾);
console.log(this.route.snapshot.queryParams[鈥榬eferer鈥橾);
this.id=this.route.snapshot.params[鈥榠d鈥橾;
this.lugar=this.buscarLugar();
}

buscarLugar(){
return this.lugares.filter((lugar: { id: any; })=>{return lugar.id=this.id})[0] || null;
}
}

detalle.component.html

<div class=鈥渃ontainer鈥>
<h1>{{lugar.nombre}}</h1>
<hr>
<small>{{lugar.distancia}}</small>
<br>
<div class=鈥渃ard鈥>
<p>
{{lugar.description}}
</p>
<b>Plan:{{lugar.plan}}</b>
</div>
</div>

de este modo llamo las variable
<div class=鈥渃ontainer鈥>
<h1>{{lugar.nombre}}</h1>
<hr/>
<small>{{lugar.distancia}} km</small>
<br/>
<p>
{{lugar.descripcion}}
</p>
<b>Plan: {{lugar.plan}}</b>
</div>
y asi es mi archivo detalle.component.ts pero me da error
import { Component } from 鈥楡angular/core鈥;
import { ActivatedRoute } from 鈥淍angular/router鈥;

@Component({
selector: 鈥榓pp-detalle鈥,
templateUrl: 鈥./detalle.component.html鈥
})
export class DetalleComponent {
lugares:any = [
{id: 1, plan: 鈥榩agado鈥 , cercania: 1, distancia: 1 , active: true , nombre:鈥楩loreria de Gardenia鈥 , descripcion: 鈥楩loreria de Gardenia en Bogot谩 que ofrece arreglos y detalles florales, decoraci贸n de eventos y distribuci贸n al por mayor de flores de corte tipo exportaci贸n鈥檥,
{id: 2, plan: 鈥榞ratuito鈥 , cercania: 1, distancia: 1.8 , active: true , nombre:鈥楧onas la pasadita鈥 , descripcion:鈥楲as Donas la pasadita caseras, tambi茅n conocidas como donuts o rosquillas, son muy f谩ciles de preparar y constituyen una de las meriendas favoritas鈥檥,
{id: 3, plan: 鈥榞ratuito鈥 , cercania: 2, distancia: 5 , active: true , nombre:鈥榁eterinaria Huellitas Felices鈥 , descripcion:鈥楲a Veterinaria Huellitas Feliceses la rama de la medicina que se ocupa de la prevenci贸n, diagn贸stico y tratamiento de enfermedades, trastornos y lesiones鈥檥,
{id: 4, plan: 鈥榞ratuito鈥 , cercania: 3, distancia: 10 , active: false , nombre:鈥楽ushi Suhiroll鈥 , descripcion:'Sushi Suhiroll es un plato de origen japon茅s basado en arroz aderezado con vinagre de arroz, az煤car y sal '},
{id: 5, plan: 鈥榩agado鈥 , cercania: 3, distancia: 35 , active: true , nombre:鈥楬otel la Gracia鈥 , descripcion:鈥楨l Hotel la Gracia se encuentra en Bogot谩 y ofrece terraza, sal贸n compartido y bar. Este hotel de 3 estrellas ofrece WiFi gratuita.鈥檥,
{id: 6, plan: 鈥榞ratuito鈥 , cercania: 3, distancia: 120 , active: false , nombre:鈥榋apateria el Clavo鈥 , descripcion:鈥榋apateria el Clavo es un nuevo concepto de zapater铆a de moda y fiesta en Val猫ncia. Una oportunidad para vestir tus pies y sentirte c贸moda. 隆Ven a conocernos!鈥檥
];
id = null;
lugar:any {};
constructor(private route: ActivatedRoute){
console.log(this.route.snapshot.params[鈥榠d鈥橾);
console.log(this.route.snapshot.queryParams[鈥榓ction2鈥橾);//para imprimir el objeto en la consola del navegador
console.log(this.route.snapshot.queryParams[鈥榬eferer鈥橾);//tipo Query
this.id = this.route.snapshot.params[鈥榠d鈥橾;
this.lugar = this.buscarLugar();
}

buscarLugar(){
  return this.lugar.filter((lugar) => { return lugar.id === this.id }) [0] || null;
}

}

return this.lugares.find(c => c.id === this.id);