temporal
extension vscode
- angular language service
-
alphine js intellisense
-
mostrar y ocultar un elemento, OpenAlert es una variable booleana que se exporta, y mensaje es un ng-template con un nombre mensaje
<div *ngIf="OpenAlerta"></div>
<div *ngIf="OpenAlerta; else mensaje"></div>
<ng-template #mensaje> mensaje </ng-template>
- images es una lista, nsrc es la variable que toma todas las imagenes una por una, en la clase typescript se importo NgFor, para que funcione. Y index hace referencia al index de la iteracion
<ul>
<li *ngFor="let nsrc of images; let i=index">
<img [src]="nsrc" alt="img" />
<p>{{i+1}}</p>
</li>
</ul>
- para un Switch, se importa las todas las clases necesarias , dia es un valor numerico
<div [ngSwitch]="dia">
<button *ngSwitchCase="1" class="btn">Lunes</button>
<button *ngSwitchCase="2" class="btn">Martes</button>
<button *ngSwitchCase="3" class="btn">miercoles</button>
<button *ngSwitchCase="4" class="btn">jueves</button>
<button *ngSwitchCase="5" class="btn">viernes</button>
<button *ngSwitchCase="6" class="btn">Sabado</button>
<button *ngSwitchDefault class="btn">no hay dia para estos</button>
</div>
- ngModel hace que se actualize la variable texto con lo que se ingresa en el input, y se esta llamando como placeholder en el otro input, es decir estan sincronizados
<div class="card">
<div class="card-body">
<div class="mb-2">
<label class="form-lable"> Nombre: </label>
<input type="text" placeholder="ingrese nombre" [(ngModel)]="texto" />
</div>
<div class="mb-2">
<label class="form-lable"> pass: </label>
<input type="text" name="pass" [placeholder]="texto" />
</div>
</div>
</div>
- formulario basado en plantillas con NgModel, el boton submit solo funciona con ngSubmit, las validaciones se hacen mediante el estado de inputs, es obligatorio que presente un nombre
<div class="card">
<div class="card-body">
<form (ngSubmit)="procesar()">
<div class="mb-2">
<label class="form-lable"> Nombre: </label>
<input
name="nombre"
#nombreI="ngModel"
type="text"
placeholder="ingrese nombre"
[(ngModel)]="texto"
required
/>
<div class="alert alert-danger mt-2" [hidden]="nombreI.valid">
el nombre es obligatorio
</div>
</div>
<div class="mb-2">
<label class="form-lable"> pass: </label>
<input type="text" name="pass" [placeholder]="texto" />
</div>
<div>
<button
class="btn btn-danger"
type="submit"
[disabled]="nombreI.invalid"
>
save
</button>
</div>
</form>
</div>
</div>
- formulario reactivos: modulo formcontrol, reactiveFormModule,
import { Component } from "@angular/core";
import {
FormControl,
FormGroup,
Validators,
FormBuilder,
} from "@angular/forms";
import { ReactiveFormsModule } from "@angular/forms";
import { NgIf, JsonPipe } from "@angular/common";
@Component({
selector: "app-formulario1",
standalone: true,
imports: [ReactiveFormsModule, NgIf, JsonPipe],
templateUrl: "./formulario1.component.html",
styleUrls: ["./formulario1.component.css"],
})
export class Formulario1Component {
formUser: FormGroup;
constructor(private fb: FormBuilder) {
this.formUser = this.fb.group({
user: ["", [Validators.required, Validators.email]], // Cambiado a "user"
clave: ["", Validators.required],
});
}
get user() {
return this.formUser.get("user") as FormControl;
}
get clave() {
return this.formUser.get("clave") as FormControl;
}
save() {
if (this.formUser.valid) {
console.log("User:", this.user.value);
console.log("Clave:", this.clave.value);
} else {
console.log("Formulario inválido");
}
}
}
<div class="card">
<div class="card-body">
<form [formGroup]="formUser" (ngSubmit)="save()">
<div class="mb-2">
<label class="form-label"> Nombre: </label>
<input
class="form-control"
type="text"
formControlName="user"
placeholder="ingrese nombre"
/>
<div class="alert alert-danger" [hidden]="user.valid || user.pristine">
<span *ngIf="user.errors?.['required']">el email es obligatoria</span>
<span *ngIf="user.errors?.['email']">el email no es valido</span>
</div>
</div>
<div class="mb-2">
<label class="form-label"> Pass: </label>
<input
type="text"
class="form-control"
formControlName="clave"
placeholder="enter pass"
/>
</div>
<div>
<button
type="button"
class="btn btn-danger"
[disabled]="formUser.invalid"
>
Save
</button>
</div>
</form>
</div>
</div>
- comunicacion entre componentes (padre - hijo)
<--! en el componente padre se puede enviar parametros al componente hijo -->
<app-son-c [mensaje]="'mensaje desde el componente ' + nombre"></app-son-c>
- ngClass: cambia el estilo del boton cuando la variable user es admin
- ngStyle
<div [ngStyle]="setStyles()">
This text changes color and size dynamically based on a function!
</div>
<button (click)="isActive = !isActive" type="submit">login</button>
isActive: boolean = true;
setStyles() {
return {
'color': this.isActive ? 'green' : 'black',
'font-size': this.isActive ? '24px' : '16px',
'font-weight': this.isActive ? 'bold' : 'normal',
};
}
toogleStyle() {
this.isActive = !this.isActive;
}
- input select
<div>
<p>¡Elige tu tema favorito!</p>
<select [(ngModel)]="tema">
<option value="" disabled>Selecciona un tema</option>
<option value="musica">Música</option>
<option value="teatro">Teatro</option>
<option value="peliculas">Películas</option>
<option value="cocina">Cocina</option>
</select>
<p>Tema seleccionado: {{ tema }}</p>
</div>
- routing
constructor(private router: Router) {}
onLogin() {
this.router.navigate(['/dashboard']);
}
goToForgotPassword() {
this.router.navigate(['/forgot-password']);
}
<form (ngSubmit)="onLogin()">
<label for="user">Usuario</label>
<input type="text" id="user" [(ngModel)]="user" name="user" required />
<br />
<label for="pass">Contraseña</label>
<input type="password" id="pass" [(ngModel)]="pass" name="pass" required />
<br />
<button type="submit">Login</button>
`<span (click)="goToForgotPassword()" style="color: blue; cursor: pointer;"
>Olvidó su contraseña?</span
>`
</form>
import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { HomeComponent } from "./home/home.component";
import { AboutComponent } from "./about/about.component";
import { NotFoundComponent } from "./not-found/not-found.component";
const routes: Routes = [
{ path: "", component: HomeComponent }, // Default route
{ path: "about", component: AboutComponent },
{ path: "**", component: NotFoundComponent }, // Wildcard route for 404
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}