Host Listeners
Clase 20 de 80 • Curso de Angular 4
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
Aprende a crear una directiva de atributo en Angular para contar clics en anchors y aprovechar datos de analytics sin complicaciones. Verás cómo usar HostListener para escuchar eventos, limitar el selector a hipervínculos y registrar información en console para debugging. Además, integra la directiva en app.module.ts y úsala en tu lista de lugares. Si luego quieres almacenar datos, lo ideal es persistirlos en un servidor con Node.
¿Qué problema resuelve esta directiva de Angular?
Esta solución te permite medir interacciones reales sobre enlaces y respaldar decisiones con datos. Es útil para presentar resultados a propietarios: visitas, clics diarios y comportamiento por elemento.
- Contar clics por elemento con una directiva ligera.
- Analytics accionables desde el front-end.
- Escucha de eventos con HostListener de forma declarativa.
- Alcance por anchor: cada enlace lleva su propio conteo.
¿Cómo se crea la directiva de atributo con HostListener?
Partimos de un archivo con la convención de Angular: nombre en pascal case para la clase, sufijo .directive.ts y un selector de atributo que aplica solo a enlaces.
// contar-clicks.directive.ts
import { Directive, HostListener } from '@angular/core';
@Directive({
selector: 'a[contarClicks]'
})
export class ContarClicksDirective {
private clickN = 0;
@HostListener('click', ['$event.target'])
onClick(btn: HTMLElement) {
console.log('En el anchor:', btn);
console.log('Número de clicks:', this.clickN++);
}
}
Claves de la implementación:
- @Directive con selector de atributo: 'a[contarClicks]'.
- Variable de estado: clickN inicia en 0 y se incrementa en cada clic.
- @HostListener('click'): escucha el evento y recibe el event target.
- Salida de debugging: imprime el anchor, el mensaje y el conteo.
¿Cómo registrarla en app.module.ts?
Asegúrate de declararla para usarla en plantillas.
// 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';
import { ContarClicksDirective } from './directives/contar-clicks.directive';
@NgModule({
declarations: [
AppComponent,
ResaltarDirective,
ContarClicksDirective
],
imports: [BrowserModule],
bootstrap: [AppComponent]
})
export class AppModule {}
¿Cómo usarla en la lista de lugares?
La directiva no recibe parámetros: no uses corchetes. Aplícala directamente sobre el anchor que envuelve el elemento.
<a contarClicks>
<li>La Gardenia</li>
</a>
<a contarClicks>
<li>Hotel La Gracia</li>
</a>
Tips prácticos para validar en la console del navegador:
- Abre la pestaña consola y filtra niveles: desactiva errores si distraen.
- Verás el mensaje con el número de clicks creciendo por elemento.
- Cambia entre enlaces: cada uno conserva su propio conteo.
¿Qué debes saber de eventos y alcance?
Con HostListener el alcance es por instancia: cada anchor obtiene su propio oyente y su propio estado. Por eso, si haces clic en “La Gardenia” y luego en “Hotel La Gracia”, cada uno muestra su propio contador independiente.
Puntos clave para eventos:
- Evento principal: click. Puedes usar otros como mouseover o blur.
- Parámetro del oyente: $event.target para acceder al elemento objetivo.
- Buenas prácticas: mantén el conteo en una propiedad privada y usa console para debugging.
- Persistencia recomendada: guarda los analytics en servidor con Node cuando sea necesario.
¿Quieres que amplíe el ejemplo con envío de datos al servidor o más eventos del DOM? Cuéntame tu caso y te propongo el siguiente paso.