Cómo crear directivas de atributo en Angular
Clase 19 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
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.