ANG_FRONT

Práctica 5. Mejorando la funcionalidad y presentación: Uso de directivas en Angular

Objetivo de la práctica:

Duración aproximada

Instrucciones

  1. Configuración del proyecto.
ng new tareas-app
cd tareas-app
ng serve
  1. Crear el Componente.
ng generate component tareas

  1. Implementar la lógica en el componente.
    • Abrir tareas.component.ts y agregar la siguiente lógica:
import { Component } from '@angular/core';

@Component({
  selector: 'app-tareas',
  templateUrl: './tareas.component.html',
  styleUrls: ['./tareas.component.css']
})
export class TareasComponent {
  nuevaTarea: string = '';
  tareas: { nombre: string, completada: boolean }[] = [];

  AgregarTarea() {
    if (this.nuevaTarea.trim()) {
      this.tareas.push({ nombre: this.nuevaTarea, completada: false });
      this.nuevaTarea = '';
    }
  }

  eliminarTarea(index: number) {
    this.tareas.splice(index, 1);
  }
}

  1. Crear la plantilla HTML.
<h2>Lista de Tareas</h2>

<input [(ngModel)]="nuevaTarea" placeholder="Agregar nueva tarea" />
<button (click)="agregarTarea()">Agregar</button>

<ul>
  <li *ngFor="let tarea of tareas; let i = index">
    <span [ngClass]="{ 'completada': tarea.completada }" (click)="tarea.completada = !tarea.completada">
      
    </span>
    <button (click)="eliminarTarea(i)">Eliminar</button>
  </li>
</ul>

<p *ngIf="tareas.length === 0">No hay tareas en la lista.</p>
  1. Estilos CSS (Opcional).
.completada {
  text-decoration: line-through;
  color: gray;
}
  1. Integrar el componente en la aplicación.
Copy code
<app-tareas></app-tareas>
  1. Probar la aplicación.
Copy code
ng serve

Ejercicio independiente: Crear directivas personalizadas

  1. Generar la directiva:
Copy code
ng generate directive resaltado
  1. Implementar la lógica:
Copy code
import { Directive, ElementRef, Renderer2, HostListener } from '@angular/core';

@Directive({
  selector: '[appResaltado]'
})
export class ResaltadoDirective {
  constructor(private el: ElementRef, private renderer: Renderer2) {}

  @HostListener('mouseenter') onMouseEnter() {
    this.renderer.setStyle(this.el.nativeElement, 'backgroundColor', 'yellow');
  }

  @HostListener('mouseleave') onMouseLeave() {
    this.renderer.removeStyle(this.el.nativeElement, 'backgroundColor');
  }
}

  1. Usar la directiva:
Copy code
<p appResaltado>Este texto se resaltará al pasar el ratón.</p>
  1. Probar la directiva: