Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instrucciones: Implemente las siguientes historias de usuario. Tome como base el proyecto avanzado en
clase, ahora con el código fuente dado en este documento culmine la implementación solicitada. Tenga en
cuenta que debe agregar componentes si faltan, así como métodos en el service, modelos o rutas.
Model actual:
insert(uni: University) {
return this.http.post(this.url, uni);
}
setList(listaNueva: University[]) {
this.listaCambio.next(listaNueva);
}
getList() {
return this.listaCambio.asObservable();
}
listId(id: number) {
return this.http.get<University>(`${this.url}/${id}`);
}
update(u: University) {
return this.http.put(this.url, u);
}
delete(id: number) {
return this.http.delete(`${this.url}/${id}`);
}
}
Creaedita: TS
constructor(
private uS: UniversityService,
private router: Router,
private formBuilder: FormBuilder,
private route: ActivatedRoute
) {}
ngOnInit(): void {
this.route.params.subscribe((data: Params) => {
this.id = data['id'];
this.edicion = data['id'] != null;
this.init();
});
this.form = this.formBuilder.group({
idUniversity: [''],
nameUniversity: ['', Validators.required],
adressUniversity: ['', Validators.required],
creationDateUniversity: ['', [Validators.required]],
typeUniversity: ['', Validators.required],
});
}
aceptar(): void {
if (this.form.valid) {
this.universidad.idUniversity = this.form.value.idUniversity;
this.universidad.nameUniversity = this.form.value.nameUniversity;
this.universidad.typeUniversity = this.form.value.typeUniversity;
this.universidad.creationDateUniversity =
this.form.value.creationDateUniversity;
this.universidad.adressUniversity = this.form.value.adressUniversity;
if (this.edicion) {
this.uS.update(this.universidad).subscribe(() => {
this.uS.list().subscribe((data) => {
this.uS.setList(data);
});
});
} else {
this.uS.insert(this.universidad).subscribe((data) => {
this.uS.list().subscribe((data) => {
this.uS.setList(data);
});
});
}
this.router.navigate(['universidades']);
} else {
this.mensaje = 'Por favor complete todos los campos obligatorios.';
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div class="container" style="text-align: center">
<h2>Registro de universidades</h2>
<form [formGroup]="form" (submit)="aceptar()" class="example-form">
<mat-form-field class="example-full-width" *ngIf="edicion">
<mat-label>idUniversity</mat-label>
<input matInput placeholder="Id" formControlName="idUniversity" />
</mat-form-field>
<br />
<mat-form-field class="example-full-width">
<mat-label>Universidad</mat-label>
<input
matInput
placeholder="Postre"
formControlName="nameUniversity"
/>
<mat-error
*ngIf="obtenerControlCampo('nameUniversity')?.errors?.['required']"
>
El nombre es obligatorio.
</mat-error>
</mat-form-field>
<br />
<mat-form-field class="example-full-width">
<mat-label>Dirección</mat-label>
<input
matInput
placeholder="Dirección"
formControlName="adressUniversity"
/>
<mat-error
*ngIf="obtenerControlCampo('adressUniversity')?.errors?.['required']"
>
La direcciónes obligatoria .
</mat-error>
</mat-form-field>
<br />
<mat-form-field class="example-full-width">
<mat-label>Tipo</mat-label>
<mat-select formControlName="typeUniversity">
<mat-option *ngFor="let p of tipos" [value]="p.value">
{{ p.viewValue }}
</mat-option>
</mat-select>
<mat-error
*ngIf="obtenerControlCampo('typeUniversity')?.errors?.['required']"
>
El tipo es obligatorio.
</mat-error>
</mat-form-field>
<br />
<mat-form-field appearance="fill" class="example-full-width">
<input
matInput
placeholder="Ingrese fecha"
[matDatepicker]="picker"
formControlName="creationDateUniversity"
[max]="maxFecha"
/>
<mat-hint>MM/DD/YYYY</mat-hint>
<mat-datepicker-toggle
matIconSuffix
[for]="picker"
></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
<mat-error
*ngIf="obtenerControlCampo('creationDateUniversity')?.errors?.['require
d']"
>
La fecha de creación es obligatoria.
</mat-error>
</mat-form-field>
<br />
<button mat-raised-button color="primary">Aceptar</button>
<button mat-raised-button color="warn" routerLink="/universidades">
Cancelar
</button>
<p>{{ mensaje }}</p>
</form>
</div>
</body>
</html>
LIistar: TS
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=<device-width>, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<div class="container">
<br />
<h2 style="text-align: center">Lista de Universidades</h2>
<div style="text-align: right">
<button
mat-raised-button
color="primary"
routerLink="/universidades/nuevo"
>
Nuevo
</button>
</div>
<mat-form-field>
<input matInput (keyup)="filter($event)" placeholder="buscar" />
</mat-form-field>
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
<!--- Note that these columns can be defined in any order.
The actual rendered columns are set as a property on the row
definition" -->
App-routing.module
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
app.module.ts