Angular 不斷發展的生態系統正在轉向更函數式和響應式程式設計範式。使用 Signals、資源 API 和 注入函數 等工具,開發人員可以簡化應用程式邏輯、減少樣板檔案並增強可重複使用性。
這篇部落格文章探討了 Angular 的現代功能如何使開發人員能夠以乾淨、聲明性和響應式的方式處理非同步邏輯。
在此範例中,我們將從 REST API 取得貼文。每個貼文都有以下結構:
export interface Post { userId: number; id: number; title: "string;" body: string; }
API 的基本 URL 透過 InjectionToken 提供:
import { InjectionToken } from '@angular/core'; export const API_BASE_URL = new InjectionToken<string>('API_BASE_URL', { providedIn: 'root', factory: () => 'https://jsonplaceholder.typicode.com', });
以下函數使用 Angular 的 HttpClient 按 ID 取得貼文:
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}`); }
要在元件中使用此函數,您可以將其綁定到可觀察物件並使用非同步管道顯示結果:
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()); }
資源 API 簡化了反應性和狀態管理。這是一個使用資源 API 的函數:
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(); }, }); }
這種方法:
在組件中:
export interface Post { userId: number; id: number; title: "string;" body: string; }
資源 API 自動管理載入、錯誤和成功等狀態。這消除了對自訂標誌的需要並確保模板更乾淨。
Resource API 與 Signals 緊密整合。對 Signal 的變更會自動觸發載入器功能,確保您的 UI 始終反映最新資料。
錯誤透過 .error() 集中並公開,簡化了範本中的錯誤管理。
當依賴項(例如 postId)變更時,API 會取消正在進行的請求,從而防止競爭條件和陳舊資料。
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 |
Angular 的注入功能和基於訊號的資源 API 代表了簡化非同步邏輯的飛躍。借助這些工具,開發人員可以:
Resource API 特別適合現代 Angular 項目,提供自動反應性和宣告性狀態處理。今天就開始探索這些功能,讓您的 Angular 開發更上一層樓!
以上是Angular 中的函數式程式設計:探索注入與資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!