Rumah >hujung hadapan web >tutorial js >Pengaturcaraan Fungsian dalam Sudut: Meneroka suntikan dan Sumber
Ekosistem Angular yang sedang berkembang sedang beralih ke paradigma yang lebih pengaturcaraan berfungsi dan reaktif. Dengan alatan seperti Isyarat, API Sumber dan fungsi suntikan, pembangun boleh memudahkan logik aplikasi, mengurangkan boilerplate dan meningkatkan kebolehgunaan semula.
Siaran blog ini meneroka cara ciri moden Angular memperkasakan pembangun untuk mengendalikan logik tak segerak dengan cara yang bersih, deklaratif dan reaktif.
Untuk contoh ini, kami akan mengambil siaran daripada REST API. Setiap jawatan mempunyai struktur berikut:
export interface Post { userId: number; id: number; title: "string;" body: string; }
URL asas untuk API disediakan melalui InjectionToken:
import { InjectionToken } from '@angular/core'; export const API_BASE_URL = new InjectionToken<string>('API_BASE_URL', { providedIn: 'root', factory: () => 'https://jsonplaceholder.typicode.com', });
Fungsi berikut mengambil siaran dengan IDnya menggunakan HttpClient Angular:
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}`); }
Untuk menggunakan fungsi ini dalam komponen, anda boleh mengikatnya pada yang boleh diperhatikan dan memaparkan hasilnya dengan paip async:
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 Sumber memudahkan kereaktifan dan pengurusan keadaan. Berikut ialah fungsi yang menggunakan API Sumber:
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(); }, }); }
Pendekatan ini:
Dalam komponen:
export interface Post { userId: number; id: number; title: "string;" body: string; }
API Sumber secara automatik mengurus keadaan seperti pemuatan, ralat dan kejayaan. Ini menghilangkan keperluan untuk bendera tersuai dan memastikan templat yang lebih bersih.
API Sumber disepadukan rapat dengan Isyarat. Perubahan kepada Isyarat secara automatik mencetuskan fungsi pemuat, memastikan UI anda sentiasa mencerminkan data terkini.
Ralat dipusatkan dan didedahkan melalui .error(), memudahkan pengurusan ralat dalam templat.
API membatalkan permintaan berterusan apabila kebergantungan (cth., postId) berubah, menghalang keadaan perlumbaan dan data basi.
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 |
Fungsi suntikan Angular dan API Sumber berasaskan Isyarat mewakili lonjakan ke hadapan dalam memudahkan logik tak segerak. Dengan alatan ini, pembangun boleh:
API Sumber, khususnya, sesuai untuk projek Angular moden, menyediakan kereaktifan automatik dan pengendalian keadaan deklaratif. Mula meneroka ciri ini hari ini dan bawa pembangunan Sudut anda ke peringkat seterusnya!
Atas ialah kandungan terperinci Pengaturcaraan Fungsian dalam Sudut: Meneroka suntikan dan Sumber. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!