Heim >Web-Frontend >js-Tutorial >Funktionale Programmierung in Angular: Erkundung von Injektionen und Ressourcen
Das sich entwickelnde Ökosystem von Angular verlagert sich in Richtung eines funktionaleren und reaktiveren Programmierparadigmas. Mit Tools wie Signals, der Resource API und der Inject-Funktion können Entwickler die Anwendungslogik vereinfachen, Boilerplate reduzieren und die Wiederverwendbarkeit verbessern.
In diesem Blogbeitrag wird untersucht, wie die modernen Funktionen von Angular Entwicklern ermöglichen, asynchrone Logik sauber, deklarativ und reaktiv zu handhaben.
In diesem Beispiel rufen wir Beiträge von einer REST-API ab. Jeder Beitrag hat die folgende Struktur:
export interface Post { userId: number; id: number; title: "string;" body: string; }
Die Basis-URL für die API wird über ein InjectionToken bereitgestellt:
import { InjectionToken } from '@angular/core'; export const API_BASE_URL = new InjectionToken<string>('API_BASE_URL', { providedIn: 'root', factory: () => 'https://jsonplaceholder.typicode.com', });
Die folgende Funktion ruft einen Beitrag anhand seiner ID mithilfe von Angulars HttpClient ab:
import { HttpClient } from '@angular/common/http'; import { inject } from '@angular/core'; import { Observable } from 'rxjs'; import { API_BASE_URL } from '../tokens/base-url.token'; import { Post } from './post.model'; export function getPostById(postId: number): Observable<Post> { const http = inject(HttpClient); const baseUrl = inject(API_BASE_URL); return http.get<Post>(`${baseUrl}/posts/${postId}`); }
Um diese Funktion in einer Komponente zu verwenden, können Sie sie an ein Observable binden und das Ergebnis mit der asynchronen Pipe anzeigen:
import { AsyncPipe, JsonPipe } from '@angular/common'; import { Component, signal } from '@angular/core'; import { getPostById } from './shared/posts.inject'; @Component({ selector: 'app-root', standalone: true, imports: [AsyncPipe, JsonPipe], template: ` @if (post$ | async; as post) { <p>{{ post | json }}</p> } @else { <p>Loading...</p> } `, }) export class AppComponent { private readonly postId = signal(1); protected readonly post$ = getPostById(this.postId()); }
Die Ressourcen-API vereinfacht die Reaktivität und Statusverwaltung. Hier ist eine Funktion, die die Ressourcen-API verwendet:
import { inject, resource, ResourceRef, Signal } from '@angular/core'; import { API_BASE_URL } from '../tokens/base-url.token'; export function getPostByIdResource(postId: Signal<number>): ResourceRef<Post> { const baseUrl = inject(API_BASE_URL); return resource<Post, { id: number }>({ request: () => ({ id: postId() }), loader: async ({ request, abortSignal }) => { const response = await fetch(`${baseUrl}/posts/${request.id}`, { signal: abortSignal, }); return response.json(); }, }); }
Dieser Ansatz:
In einer Komponente:
export interface Post { userId: number; id: number; title: "string;" body: string; }
Die Ressourcen-API verwaltet automatisch Status wie Laden, Fehler und Erfolg. Dadurch entfällt die Notwendigkeit benutzerdefinierter Flags und es werden sauberere Vorlagen gewährleistet.
Die Ressourcen-API ist eng in Signals integriert. Änderungen an einem Signal lösen automatisch die Loader-Funktion aus und stellen so sicher, dass Ihre Benutzeroberfläche immer die neuesten Daten widerspiegelt.
Fehler werden über .error() zentralisiert und offengelegt, was die Fehlerverwaltung in Vorlagen vereinfacht.
Die API bricht laufende Anfragen ab, wenn sich Abhängigkeiten (z. B. PostId) ändern, und verhindert so Race Conditions und veraltete Daten.
Feature | RxJS (Observable) | Resource API (Signal) |
---|---|---|
State Management | Manual | Automatic (loading, error) |
Reactivity | Requires custom setup | Built-in |
Error Handling | Manual | Declarative |
Lifecycle Handling | Requires cleanup | Automatic |
Angulars Injektionsfunktion und signalbasierte Ressourcen-API stellen einen Fortschritt bei der Vereinfachung der asynchronen Logik dar. Mit diesen Tools können Entwickler:
Insbesondere die Ressourcen-API ist ideal für moderne Angular-Projekte und bietet automatische Reaktivität und deklarative Statusverarbeitung. Beginnen Sie noch heute mit der Erkundung dieser Funktionen und bringen Sie Ihre Angular-Entwicklung auf die nächste Stufe!
Das obige ist der detaillierte Inhalt vonFunktionale Programmierung in Angular: Erkundung von Injektionen und Ressourcen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!