En aquest tema, aprendrem com utilitzar serveis en Angular per gestionar l'estat de l'aplicació. La gestió d'estat és crucial per mantenir la coherència de les dades i assegurar que els components de l'aplicació estiguin sincronitzats. Els serveis ens permeten centralitzar la lògica de negoci i compartir dades entre components de manera eficient.
Objectius
- Entendre la importància de la gestió d'estat en aplicacions Angular.
- Aprendre a crear i utilitzar serveis per gestionar l'estat.
- Implementar patrons comuns de gestió d'estat amb serveis.
Conceptes Clau
Què és la gestió d'estat?
La gestió d'estat es refereix a la manera com es maneja i es manté l'estat (dades) d'una aplicació. En aplicacions Angular, l'estat pot incloure informació com l'usuari actual, configuracions de l'aplicació, dades de formularis, etc.
Per què utilitzar serveis per a la gestió d'estat?
- Centralització: Els serveis permeten centralitzar la lògica de negoci i les dades, facilitant la seva gestió i manteniment.
- Compartició de dades: Els serveis poden ser injectats en múltiples components, permetent compartir dades entre ells.
- Desacoblament: Els serveis desacoblen la lògica de negoci dels components, fent que aquests siguin més simples i fàcils de provar.
Creació d'un Servei per a la Gestió d'Estat
Pas 1: Crear el Servei
Primer, crearem un servei utilitzant l'Angular CLI.
Això generarà un fitxer state.service.ts amb el següent contingut bàsic:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class StateService {
constructor() { }
}Pas 2: Definir l'Estat
Afegirem propietats al servei per mantenir l'estat de l'aplicació. Per exemple, podem gestionar l'estat d'un usuari autenticat.
export class StateService {
private user: any = null;
constructor() { }
setUser(user: any) {
this.user = user;
}
getUser() {
return this.user;
}
clearUser() {
this.user = null;
}
}Pas 3: Utilitzar el Servei en Components
Ara que tenim el servei, podem injectar-lo en els components que necessiten accedir o modificar l'estat.
import { Component, OnInit } from '@angular/core';
import { StateService } from './state.service';
@Component({
selector: 'app-user',
template: `
<div *ngIf="user">
Benvingut, {{ user.name }}!
</div>
`
})
export class UserComponent implements OnInit {
user: any;
constructor(private stateService: StateService) { }
ngOnInit() {
this.user = this.stateService.getUser();
}
}Pas 4: Actualitzar l'Estat
Podem actualitzar l'estat des de qualsevol component injectant el servei i utilitzant els seus mètodes.
import { Component } from '@angular/core';
import { StateService } from './state.service';
@Component({
selector: 'app-login',
template: `
<button (click)="login()">Login</button>
`
})
export class LoginComponent {
constructor(private stateService: StateService) { }
login() {
const user = { name: 'John Doe' };
this.stateService.setUser(user);
}
}Exercici Pràctic
Objectiu
Crear un servei per gestionar l'estat d'una llista de tasques (to-do list) i utilitzar-lo en diversos components.
Passos
- Crear el servei:
ng generate service todo - Definir l'estat: Afegir propietats i mètodes per gestionar la llista de tasques.
- Utilitzar el servei: Injectar el servei en components per afegir, eliminar i mostrar tasques.
Solució
1. Crear el servei
2. Definir l'estat
export class TodoService {
private todos: string[] = [];
constructor() { }
addTodo(todo: string) {
this.todos.push(todo);
}
getTodos() {
return this.todos;
}
removeTodo(index: number) {
this.todos.splice(index, 1);
}
}3. Utilitzar el servei
Component per afegir tasques
import { Component } from '@angular/core';
import { TodoService } from './todo.service';
@Component({
selector: 'app-add-todo',
template: `
<input [(ngModel)]="newTodo" placeholder="Nova tasca">
<button (click)="addTodo()">Afegir</button>
`
})
export class AddTodoComponent {
newTodo: string = '';
constructor(private todoService: TodoService) { }
addTodo() {
if (this.newTodo) {
this.todoService.addTodo(this.newTodo);
this.newTodo = '';
}
}
}Component per mostrar tasques
import { Component, OnInit } from '@angular/core';
import { TodoService } from './todo.service';
@Component({
selector: 'app-todo-list',
template: `
<ul>
<li *ngFor="let todo of todos; let i = index">
{{ todo }}
<button (click)="removeTodo(i)">Eliminar</button>
</li>
</ul>
`
})
export class TodoListComponent implements OnInit {
todos: string[] = [];
constructor(private todoService: TodoService) { }
ngOnInit() {
this.todos = this.todoService.getTodos();
}
removeTodo(index: number) {
this.todoService.removeTodo(index);
}
}Resum
En aquest tema, hem après com utilitzar serveis per gestionar l'estat en aplicacions Angular. Hem vist com crear un servei, definir l'estat, i utilitzar-lo en components per compartir dades i lògica de negoci. La gestió d'estat amb serveis és una pràctica recomanada que ajuda a mantenir el codi organitzat i fàcil de mantenir.
Curs d'Angular 2+
Mòdul 1: Introducció a Angular
- Què és Angular?
- Configuració de l'entorn de desenvolupament
- La teva primera aplicació Angular
- Arquitectura d'Angular
Mòdul 2: Conceptes bàsics de TypeScript
- Introducció a TypeScript
- Variables i tipus de dades en TypeScript
- Funcions i funcions fletxa
- Classes i interfícies
Mòdul 3: Components i plantilles
Mòdul 4: Directives i pipes
Mòdul 5: Serveis i injecció de dependències
Mòdul 6: Enrutament i navegació
Mòdul 7: Formularis en Angular
Mòdul 8: Client HTTP i observables
- Introducció al client HTTP
- Realització de sol·licituds HTTP
- Gestió de respostes HTTP
- Ús d'observables
