用途:在 Angular 项目中集成 HttpClient、编写拦截器并处理 API 调用,属于 P1 高优先级技能。
主要能力与规范:
- 函数式拦截器:使用 HttpInterceptorFn,例如 (req, next) => next(req.clone({ setHeaders: { Authorization: token } }));用 req.clone( 克隆请求,类式拦截器已弃用;通过 provideHttpClient 中的 withInterceptors([...]) 注册。
- 类型化响应:始终为 http.post<T>()、http.get<T>() 指定类型;在服务中使用 inject(HttpClient) 而非构造函数注入;在 app.config.ts 添加 provideHttpClient(withInterceptors([...]), withFetch())。
- 服务封装:所有 HTTP 调用封装在 Service 中,禁止在组件内直接调用 http。
Signal 响应式 HTTP(Angular 17+):优先使用 httpResource() 替代手动 subscribe,信号输入变化时自动重新请求,例如 userResource = httpResource<User>(() => /api/users/${this.userId()});状态包括 .isLoading()、.hasValue()、.error()、.value()、.reload()。非 HTTP 异步操作可用 resource<T, P>({ request: () => params(), loader: ... }) 控制完整生命周期。
其他准则:缓存可在拦截器或服务中用 shareReplay(1) 实现;错误在服务或全局拦截器中用 catchError 处理,不在组件处理,并通过通知服务展示;用 HttpContext 向拦截器传递元数据(如跳过错误处理或指定缓存规则)。
反模式:组件内不写 HTTP;不用类式拦截器;GET 不用手动 subscribe,改用 httpResource() 或 toSignal(http.get(...))。
限制:资料未提供安装命令、版本兼容细节、收费与平台信息,暂未提供。