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

A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Curso de Angular 4

Curso de Angular 4

Eduardo Ibarra

Eduardo Ibarra

Manejando errores HTTP

45/80
Recursos

Vamos a provocar algunos errores para aprender a manejarlos, y mostrarle informaci贸n a los usuarios, recuerda que es importante notificarle al usuario el estado de los procesos de la aplicaci贸n.

Aportes 11

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

ME QUEDE CORTO CON LA EXPLICACI脫N DE ESTE Y OTRAS PARTES ATR脕S, EL PROFESOR NO EXPLICA BIEN LAS COSAS, PENS脡 QUE A HACER PETICIONES POST Y GET LO 脥BAMOS A HACER CON UN API REAL NO A HACER LO MISMO DE OTRA FORMA

constructor(private lugaresService: LugaresService) {
this.lugaresService.getLugares()//.valueChanges()
.subscribe(listados => {
this.listados = Object.values(listados);
var me =this;
this.listados= Object.keys(me.listados).map(function (key) {return me.listados[key]});
}, error =>{console.log(error);
alert('Tenemos algo de dificultades, disculpe las molestias. Error '+ error.statusText)
});
}

<div class="alert alert-danger hidden" role="alert" *ngIf="error">
    {{errorMessage}}
</div>
constructor(private lugaresService: LugaresService) {
    lugaresService.getLugares()
      .subscribe( lugares => {
        this.lugares = Object.keys(lugares).map( key => lugares[key]);
      }, error => {
        this.errorMessage = 'Disculpe, tenemos dificultades para mostrar esto. Error:' + error.statusText;
        this.error = true;
      });
  }

驴C贸mo le hacen para adjuntar im谩genes a estos comentarios? 驴o son urls?

buenas clases

que diferencia hay en capturar el error como lo hizo Eduardo y usar un catch ?

Con SweetAlert:

var direccion = this.persona.calle+','+this.persona.ciudad+','+this.persona.pais;
            this.personaFireBaseServices.obtenerGeoData(direccion)
                .subscribe((result) => {
                    debugger;
                    if(result.status=='OK') {
                        this.persona.id = Date.now();//id propio
                        this.persona.lat = result.results[0].geometry.location.lat;
                        this.persona.lng = result.results[0].geometry.location.lng;
                        var id=this.personaFireBaseServices.savePesona(this.persona);//.subscribe((r)=>console.log(r), (e)=>console.log(e));

                        // LIMPIAMOS LOS CONTROLES
                        this.persona = [];
                        this.persona.plan = '';
                        this.persona.estatura = 0;
                        this.persona.porte = 'peque帽o';
                        this.persona.edad = 0;
                        this.persona.nombre = '';
                        this.persona.pais = '';
                        this.persona.ciudad = '';
                        this.persona.calle = '';
                        swal({
                            title: 'Guardado!',
                            text: 'Proceso de guardado correcto!!',
                            type: 'success',
                            confirmButtonText: 'Cool'
                        })
                    }
                    else{
                        swal({
                            title: 'Error en direcci贸n!',
                            text: 'No pudimos encontrar el lugar especificado por favor, describa nuevamente la direcci贸n',
                            type: 'error',
                            confirmButtonText: 'Ok'
                        })
                    }
                },
                error => {
                    swal({
                        title: 'Error en Comunicaci贸n con el servidor!',
                        text: 'Tuvimos un problema de comunicaci贸n con el servidor de geolocalizaci贸n!! por favor intentelo m谩s tarde',
                        type: 'error',
                        confirmButtonText: 'Ok'
                    })
            }
            );

No entendi nada de este modulo

lugares.component.ts
constructor(private lugaresService: LugaresService){
//this.lugares = lugaresService.getLugares();
lugaresService.getLugares().subscribe(lugares =>{
this.lugares = lugares;
var me = this;
me.lugares = Object.keys(me.lugares).map(function (key) { return me.lugares [key]; });
//debugger; // para ver si llega el array
}, error =>{
//console.log(error);
//this.ErrorMsj=鈥楢lgo salio mal, disculpe las molestia. Error:鈥 + error.statusText;
//this.error = true;
Swal.fire({
type: 鈥榚rror鈥,
title: 鈥楨rror de comunicaci贸n鈥,
text: 鈥楢lgo salio mal.! Disculpa las molestias鈥,

    })
});

lugares.component.html
<div class=鈥渃ol-md-12鈥>
<div class=鈥渁lert alert-warning hidden鈥 role=鈥渁lert鈥 *ngIf=鈥渆rror鈥>
{{ErrorMsj}}
</div>
</div>

html

<div *ngIf="error" class="alert alert-danger" role="alert">
    {{error}}
</div>

TS

this.lugaresService.getLugares() // .valueChanges() => if it's used with database queries
                       .subscribe(lugares => {
                         this.lugares = Object.values(lugares);
                        }, error => {
                          console.log(error);
                          this.error = 'Error:' + error.statusText;
                        });

MI propuesta del reto:

Saludos.

Mi soluci贸n:
Para Bootstrap 4

Esto se agrega en la cabecera de la clase del componente: lugares.component.ts

msgError = '';
  isError = false;

Aqu铆 dentro del contructor.

lugaresService.getLugares().subscribe(lugares => {
      this.lugares = Object.values(lugares);
    }, error => {
      console.log(error);
      this.isError = true;
      this.msgError = 'Tenemos dificultades disculpe las molestias. Error: ' + error.statusText;
      // alert('Tenemos dificultades disculpe las molestias. Error:' + error.statusText);
    });

HTML

<p *ngIf="isError" class="alert alert-danger m-1" role="alert">{{msgError}}</p>

RESULTADO: