Contenido del curso
Introducción a Angular 4
Setup del Ambiente de Trabajo
Conceptos Básicos
- 9

Para qué nos sirven los Módulos y Componentes
08:10 min - 10

Tipos de Data Binding y String Interpolation
05:05 min - 11

Property Binding
06:04 min - 12

Event Binding
03:04 min - 13

ngModel y two way binding en Angular
05:12 min - 14

Directivas en Angular 4 y ngFor
07:39 min - 15

Cómo usar ngIf en Angular 4.0
03:04 min - 16

Instalando librerías con NPM (Google Maps)
06:48 min
Directivas
Angular UI
Ruteo
- 24

Qué hace el router en Angular 4
03:11 min - 25

Implementación de Rutas en el Proyecto
07:36 min - 26

Href vs router link: navegación angular
02:27 min - 27

Resaltando el link activo con CSS para indicar visualmente en que componente nos encontramos
01:53 min - 28

Parámetros de ruta con routerLink en Angular
06:01 min - 29

Parámetros tipo Query
03:53 min - 30

Creando una vista de detalle para el proyecto
09:06 min - 31

Página de contacto Angular desde cero
07:45 min
Servicios
- 32

Servicios en Angular para compartir datos
00:58 min - 33

Creando nuestro propio servicio
07:11 min - 34

Configurando Firebase en nuestro proyecto
05:12 min - 35

Guardando Records en Firebase
12:20 min - 36

Obteniendo records desde Firebase
08:40 min - 37

Obteniendo coordenadas usando Geocoding
13:45 min - 38

Reto: Crear una vista para editar records
09:29 min - 39

Mostrando marcadores en el Mapa de Google
03:02 min
Conexión Remota (Http y Sockets)
Pipes
Animaciones en Angular
Testing en Angular
Autenticación y Protección de Rutas
- 59

Cómo funcionan los JSON Web Tokens
03:05 min - 60

Preparación de vistas para login y registro
11:58 min - 61

Registrando usuarios
07:29 min - 62

Loggeando usuarios
07:18 min - 63

Guardias canActivate en Angular: Proteger rutas con autenticación
11:09 min - 64

Cómo integrar Facebook login con Firebase
09:08 min - 65

Logout en Angular con Firebase
05:28 min
RxJS
- 66

Cómo funciona RxJS con metáfora de oficina
02:09 min - 67

Mostrar email del usuario logueado en Angular
06:32 min - 68

Uso de los Observables
04:30 min - 69

Cómo implementar type ahead con Observables y RxJS
10:43 min - 70

Implementar formularios reactivos con type ahead
07:58 min - 71

Cómo rellenar campos automáticamente con Google
01:28 min
Publicando nuestro proyecto
Fin del curso
Sesiones en vivo
Contenido Bonus
Cómo crear directivas de atributo en Angular
Resumen
Crear una directiva de atributo en Angular es una forma limpia y escalable de aplicar estilos y lógica a elementos del HTML. Aquí aprenderás, con claridad y paso a paso, cómo construir la directiva “resaltar” para destacar negocios con plan pagado, usando ElementRef, Renderer2, OnInit y Input. Ya venías usando ngSwitch, ngStyle y ngClass; ahora darás el salto a una directiva propia.
¿Cómo crear una directiva de atributo para resaltar en Angular?
Partimos del objetivo: resaltar negocios con plan “pagado” en la lista de lugares. El atributo se llama plan y puede ser “pagado” o “gratuito”. Ejemplos mencionados: la florería La Gardenia y el Hotel La Gracia, ambos con plan pagado.
- Crea la carpeta: directives dentro de app para mantener orden.
- Nombra el archivo: resaltar.directive.ts.
- Define un selector de atributo: se usará como [resaltar] en el HTML.
Código base de la directiva:
import { Directive, ElementRef, Renderer2, OnInit, Input } from '@angular/core'; @Directive({ selector: '[resaltar]' }) export class ResaltarDirective implements OnInit { @Input('resaltar') plan: string = ''; constructor(private elRef: ElementRef, private renderer: Renderer2) {} ngOnInit(): void { if (this.plan === 'pagado') { this.renderer.setStyle(this.elRef.nativeElement, 'background-color', 'yellow'); this.renderer.setStyle(this.elRef.nativeElement, 'font-weight', 'bold'); } } }
¿Cómo ligar el plan con input y el selector?
- Usa @Input('resaltar') plan para enlazar el valor pasado al atributo [resaltar].
- El nombre entre comillas en Input debe coincidir con el selector.
- Inicializa la variable como cadena vacía: evita valores indefinidos.
¿Cómo nombrar carpetas y archivos para mantener orden?
- Carpeta descriptiva: directives dentro de app.
- Archivo descriptivo: resaltar.directive.ts.
- Mantén consistencia: facilita imports y lectura del equipo.
¿Qué imports, decoradores y ciclo de vida necesita la directiva?
La directiva requiere piezas clave de @angular/core para funcionar de forma segura y expresiva.
- @Directive: declara la directiva y su selector.
- OnInit / ngOnInit: ejecuta la lógica al inicializar el elemento.
- ElementRef: referencia al elemento nativo del DOM.
- Renderer2: aplica estilos y atributos de manera compatible con distintas plataformas.
- @Input: recibe datos desde el template (enlazado al selector).
¿Por qué usar renderer2 y elementref y no el dom directamente?
- Código seguro: evita manipulación directa del DOM.
- Portabilidad: mismo código funciona en distintas plataformas.
- Claridad: separa la referencia del elemento del modo de estilizarlo.
¿Qué estilos aplica la directiva cuando el plan es “pagado”?
- Fondo amarillo: background-color: yellow.
- Texto en negritas: font-weight: bold.
- Condición simple: if (this.plan === 'pagado') {...}.
¿Cómo registrar e implementar la directiva en el módulo y template?
Para usar la directiva en la app, debes declararla en el módulo y aplicarla en el template.
- Declara en el módulo: agrega ResaltarDirective a declarations en app.module.ts.
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; import { ResaltarDirective } from './directives/resaltar.directive'; @NgModule({ declarations: [ AppComponent, ResaltarDirective ], imports: [BrowserModule], bootstrap: [AppComponent] }) export class AppModule {}
- Usa en el template: enlaza el plan de cada lugar al atributo [resaltar].
<li *ngFor="let lugar of lugares" [resaltar]="lugar.plan"> {{ lugar.nombre }} </li>
- Resultado esperado: los negocios con plan “pagado” quedan con fondo amarillo y texto en negritas.
- Próximos temas: host listeners y host binders para eventos y enlaces al host.
¿Te gustaría ver variantes con clases utilitarias o más atributos dinámicos? Cuéntame en comentarios qué te interesa profundizar y en qué parte te gustaría más ejemplos.