Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • A angular
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • imunnic
  • angular
  • Wiki
  • Modulo 1.3

Modulo 1.3 · Changes

Page history
born authored Dec 22, 2025 by imunnic's avatar imunnic
Hide whitespace changes
Inline Side-by-side
Showing with 299 additions and 0 deletions
+299 -0
  • Modulo-1.3.md Modulo-1.3.md +299 -0
  • No files found.
Modulo-1.3.md 0 → 100644
View page @ 6ca55ed1
# Sesión 3 – Patrón arquitectónico, plantillas y data binding en Angular
## 1. Patrón arquitectónico utilizado por Angular
Angular utiliza una **arquitectura basada en componentes**, inspirada en el patrón **MVVM (Model–View–ViewModel)**, aunque no lo implementa de forma estricta.
No se trata de un MVC clásico, sino de un modelo adaptado a las necesidades de las aplicaciones SPA modernas.
---
## 2. Por qué Angular no sigue MVC clásico
El patrón **MVC (Model–View–Controller)** define tres capas claramente separadas:
* Model: datos y lógica de negocio
* View: representación visual
* Controller: intermediario entre modelo y vista
En Angular:
* No existe un controlador como entidad independiente
* La lógica de interacción reside en el componente
* La vista contiene lógica declarativa mediante enlaces y directivas
Por este motivo, Angular no encaja en un MVC tradicional.
---
## 3. Aproximación de Angular al patrón MVVM
Angular se aproxima conceptualmente al patrón MVVM de la siguiente forma:
| MVVM | Angular |
| --------- | ------------------------------------ |
| View | Plantilla HTML del componente |
| ViewModel | Clase del componente |
| Model | Datos, servicios y lógica de negocio |
---
### 3.1. View
La vista corresponde a la plantilla HTML del componente. En ella se definen:
* Interpolaciones
* Enlaces de propiedades
* Enlaces de eventos
* Directivas estructurales y de atributo
La vista no contiene lógica de negocio, únicamente lógica declarativa.
---
### 3.2. ViewModel
El componente actúa como **ViewModel**:
* Expone propiedades públicas
* Expone métodos que reaccionan a eventos
* Mantiene el estado necesario para la vista
Ejemplo:
```ts
export class PerfilComponent {
nombre = 'Ana';
activo = true;
cambiarEstado() {
this.activo = !this.activo;
}
}
```
---
### 3.3. Model
El modelo se distribuye entre distintos elementos:
* Interfaces de datos
* Servicios
* Estado compartido
Ejemplo:
```ts
export interface Usuario {
id: number;
nombre: string;
}
```
---
## 4. Data binding como eje del patrón
El **data binding** es el mecanismo central que conecta la vista con el componente:
* Los cambios en el componente se reflejan automáticamente en la vista
* Las acciones del usuario modifican el estado del componente
Este flujo bidireccional es característico del patrón MVVM.
---
## 5. Plantillas como capa de presentación
La plantilla representa la capa de presentación del componente y se define mediante HTML enriquecido por Angular.
Las plantillas permiten:
* Mostrar datos del componente
* Capturar eventos del usuario
* Aplicar lógica declarativa
* Componer la interfaz mediante otros componentes
---
## 6. Interpolación de datos
La interpolación permite mostrar valores del componente directamente en la plantilla.
```html
<p>Hola {{ nombre }}</p>
```
```ts
nombre = 'Carlos';
```
La interpolación es de solo lectura.
---
## 7. Property Binding
El property binding enlaza propiedades del DOM con valores del componente.
```html
<img [src]="imagenUrl">
```
```ts
imagenUrl = 'assets/logo.png';
```
---
## 8. Event Binding
El event binding permite reaccionar a eventos del DOM.
```html
<button (click)="saludar()">Saludar</button>
```
```ts
saludar() {
console.log('Evento capturado desde la plantilla');
}
```
---
## 9. Two-way Data Binding
El two-way data binding mantiene sincronizados vista y componente.
```html
<input [(ngModel)]="nombre">
<p>{{ nombre }}</p>
```
Este mecanismo combina property binding y event binding.
---
## 10. Directivas en Angular
Las directivas permiten modificar el DOM o el comportamiento de los elementos.
Se distinguen principalmente:
* Directivas estructurales
* Directivas de atributo
---
## 11. Directiva estructural `*ngIf`
Permite renderizar elementos de forma condicional.
```html
<p *ngIf="activo">Usuario activo</p>
```
```ts
activo = true;
```
---
## 12. Directiva estructural `*ngFor`
Permite iterar sobre colecciones.
```html
<li *ngFor="let item of items">{{ item }}</li>
```
```ts
items = ['Angular', 'React', 'Vue'];
```
---
## 13. Directiva de atributo `ngClass`
Permite aplicar clases CSS de forma dinámica.
```html
<p [ngClass]="{ destacado: esDestacado }">Texto</p>
```
```ts
esDestacado = true;
```
---
## 14. Comunicación desde la plantilla al componente
Los eventos capturados en la plantilla ejecutan lógica del componente.
```html
<button (click)="incrementar()">Incrementar</button>
```
```ts
incrementar() {
this.contador++;
}
```
---
## 15. Uso de componentes dentro de plantillas
Angular permite componer interfaces reutilizando componentes.
```html
<app-boton-primario></app-boton-primario>
```
---
## 16. Paso de datos a componentes hijos
Los datos se pasan a componentes hijos mediante `@Input`.
```html
<app-tarjeta [titulo]="tituloPrincipal"></app-tarjeta>
```
```ts
@Input() titulo!: string;
```
---
## 17. Envío de eventos desde componentes hijos
Los componentes hijos pueden emitir eventos al componente padre mediante `@Output`.
```ts
@Output() confirmar = new EventEmitter<void>();
```
```html
<button (click)="confirmar.emit()">Confirmar</button>
```
---
## 18. Arquitectura basada en componentes
Angular adopta un enfoque **component-driven**, donde cada componente encapsula:
* Vista
* Estado
* Comportamiento
La comunicación se realiza mediante inputs, outputs y servicios, favoreciendo una arquitectura mantenible y escalable.
A continuación se presenta la **Sesión 3 reorganizada**, manteniendo **exactamente el mismo contenido**, pero **comenzando por el patrón arquitectónico**, tal y como se solicita.
No se añade ni se elimina contenido; únicamente se **reordena** para que el marco conceptual preceda a los mecanismos técnicos (plantillas y data binding), lo cual es pedagógicamente más sólido.
Clone repository

Índice

  • Inicio
  • Módulo 1. Fundamentos y arranque del proyecto
    • Módulo 1.1 Angular
    • Módulo 1.2 Estructura
    • Módulo 1.2 Arquitectura y conceptos base
  • Módulo 2. Componentes y reutilización
  • Módulo 3. Navegación y estructura de aplicación
  • Módulo 4. Servicios y comunicación con backend
  • Módulo 5. Gestión de estado (Stores)
  • Módulo 6. Calidad, optimización y cierre