HTTP 与数据
Angular 通过 HttpClient(@angular/common/http)发起 HTTP 请求,返回 RxJS Observable。见 RxJS 互操作、依赖注入。
配置
// main.ts 或 app.config.ts
import { provideHttpClient, withInterceptors } from "@angular/common/http";
bootstrapApplication(AppComponent, {
providers: [provideHttpClient()],
});
基本请求
import { inject, Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
export interface User {
id: number;
name: string;
}
@Injectable({ providedIn: "root" })
export class UserApi {
private http = inject(HttpClient);
list() {
return this.http.get<User[]>("/api/users");
}
create(body: Pick<User, "name">) {
return this.http.post<User>("/api/users", body);
}
}
组件中配合 async 管道或 toSignal 消费,见 signals/rxjs。
拦截器
函数式拦截器(Angular 15+)用于统一附加 Token、处理错误:
import { HttpInterceptorFn } from "@angular/common/http";
export const authInterceptor: HttpInterceptorFn = (req, next) => {
const token = localStorage.getItem("token");
if (token) {
req = req.clone({ setHeaders: { Authorization: `Bearer ${token}` } });
}
return next(req);
};
provideHttpClient(withInterceptors([authInterceptor]));
错误处理
在 subscribe 的 error 回调、catchError 操作符或全局拦截器中处理;向用户展示错误时避免泄露服务端内部堆栈。
参考文献
以下链接在编写时均可正常访问:
| 资料 | 说明 |
|---|---|
| HttpClient | 官方指南 |
| 拦截器 | 函数式拦截器 |
| MDN:HTTP | 协议基础 |
相关文章
生态集成
Angular 官方维护路由、HTTP、表单、动画等;UI 与状态扩展由社区与官方 Material 团队提供。涵盖官方/半官方库、常用第三方库、与 Vue/React 生态对照、选型建议与常见坑。
Signal 基础
Signals 是 Angular 16 引入的响应式原语:可读写的 signal、派生的 computed、副作用 effect。用于组件内状态与跨组件细粒度更新,涵盖 API、input signal、与变更检测的关系、最佳实践与常见坑。
RxJS 互操作
Angular 内置 RxJS 处理异步流(HTTP、HttpClient、路由事件、FormControl 的 valueChanges 等)。Signal 适合同步/短链路状态;长生命周期流仍常用 Observable。涵盖 async 管道、toSignal/toObservable、常用操作符、最佳实践与常见坑。
表单
Angular 提供 响应式表单(Reactive Forms) 与 模板驱动表单(Template-driven)。复杂表单推荐 Reactive Forms(模型在 TypeScript 中,易测试)。涵盖 FormGroup/FormArray、Typed Forms、自定义校验器、最佳实践与常见坑。
状态管理
Angular 没有强制单一状态库:服务 + DI、Signal、RxJS 即可覆盖多数场景;大型应用可选用 NgRx。涵盖选型、服务作为状态容器、跨组件共享、NgRx 与 SignalStore、常见坑。
变更检测
Angular 在数据变化后更新 DOM 的过程称为 变更检测(Change Detection)。理解默认策略、Zone.js 机制、OnPush 与 Signal 协同,有助于性能调优。运行时技巧见 runtime。