ng new tareas-app
cd tareas-app
ng serve
ng generate component tareas
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);
}
}
<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>
.completada {
text-decoration: line-through;
color: gray;
}
Copy code
<app-tareas></app-tareas>
Copy code
ng serve
Copy code
ng generate directive resaltado
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');
}
}
Copy code
<p appResaltado>Este texto se resaltará al pasar el ratón.</p>