posts/angular-features-19-to-21/ #25
Replies: 4 comments
-
|
理解 针对你的三个疑问,我们逐一拆解: 1.
|
| 特性 | computed |
linkedSignal |
|---|---|---|
| 可写性 | 只读 (没有 .set() 方法) |
可写 (有 .set() 和 .update()) |
| 值来源 | 永远 100% 依赖于内部引用的信号 | 初始/重置时依赖 computation,平时可以手动修改 |
| 适用场景 | 派生状态(如:总价 = 单价 * 数量) | 带默认值的状态(如:重置表单、分页重置) |
总结
在你的代码例子中:
page的computation: () => 1:意思是不管你分类怎么换、排序怎么调,只要它们一动,页码就强制回到第 1 页。这非常符合搜索筛选的逻辑。- 如果你手动点了“下一页”(
page.update(p => p + 1)),这属于手动修改,不会影响category或sortBy。
一句话总结: linkedSignal 就是一个**“一旦监听到源头变化,就会根据 computation 逻辑自我重置”**的增强型可写信号。
你现在明白为什么在切换分类时,要把页码重置为 1 了吗?
Beta Was this translation helpful? Give feedback.
-
|
这是一个非常棒的切入点!在 Angular 全面拥抱 Signal 的时代,引入了 我们直接切入核心:传统上,Angular 的 为了帮你彻底梳理这部分知识,我们将从“底层技术”到“主流方案”,再到“Angular 官方的设计考量”层层递进。 一、
|
| 特性 | Fetch API | XMLHttpRequest (XHR) |
|---|---|---|
| 设计时代 | 现代 Web 标准 (ES6+) | 老旧的 Web 标准 (诞生于近 20 年前) |
| 异步模型 | 基于 Promise,天然契合 async/await |
基于 事件回调 (onreadystatechange 等) |
| API 友好度 | 简洁、清晰、链式调用 | 冗长、复杂、容易产生回调地狱 |
| 流处理 (Streaming) | 原生支持 ReadableStream |
不支持真正的流,只能阶段性读取响应体 |
| 取消请求 | 通过 AbortController 实现 |
原生 abort() 方法 |
| 上传进度 | 相对较弱(目前难以直接追踪单次上传进度) | 原生支持完整的上传/下载进度事件 |
三、 主流方案是哪种?(Fetch 还是 XHR)
在整个前端行业(React, Vue, Node.js 等):Fetch 是绝对的主流和标准。 XHR 正在被慢慢淘汰(除了极少数需要精确兼容古董浏览器,或需要极细粒度上传进度条的场景)。
在 Angular 生态中:
主流方案依然是 HttpClient。但趋势是配置 withFetch() 让其底层使用 Fetch。因为 HttpClient 不仅仅是一个发请求的工具,它为企业级开发提供了一套完整的生态(我们接着往下看)。
四、 为什么 Angular 要同时提供 resource 和 httpResource?
这是你疑问的核心:既然都能发请求,为什么要设计两个 API?主要原因是灵活性与企业级生态继承的权衡。
1. resource:万能的异步数据加载器
- 定位: 它是 Angular Signals 时代最基础的异步原语。
- 特点: 它完全不在乎你的数据是怎么来的。你可以用
fetch发请求,可以使用 GraphQL 客户端,可以调用 FirebaseSDK,甚至可以从浏览器的IndexedDB或 Web Bluetooth 读取数据。只要是个 Promise,它就能处理。 - 缺点: 它是“裸”的。如果你用它写
fetch,你就享受不到 Angular 生态里现成的功能。
2. httpResource:专为 Angular HTTP 生态打造的特种兵
- 定位: 它是
resource的一个特定版本,内部强制绑定并调用了 Angular 的HttpClient。 - 设计的根本原因 (The Main Decision Reason): Angular 开发者在过去几年里写了海量的 拦截器 (HttpInterceptors)。比如:
- 在 Header 里自动塞入 JWT Token。
- 全局捕获 401 错误并跳转登录页。
- 统一的全局 Loading 动画。
如果官方只提供resource + fetch,那么所有现存的拦截器、测试工具(HttpTestingController)将瞬间失效,这会导致极其痛苦的破坏性更新。
- 优点: 完美继承了
HttpClient的所有特性(拦截器、类型安全、测试模块),只是将结果包装成了响应式的 Signal。
五、 总结与建议
- 如果你只是需要从一个开放的 API 随便拉点数据,或者你在调用第三方 SDK(返回 Promise),用
resource。 - 如果你在开发一个标准的 Angular 企业级应用,有统一的鉴权、错误拦截逻辑,并且已经配置了
HttpClient,毫无疑问应该首选httpResource。
Beta Was this translation helpful? Give feedback.
-
|
这是一个非常好的问题,也是很多开发者在初接触 Angular Signals 时容易产生误解的地方。 直接回答你的问题:不会。如果你不主动调用 为了彻底弄懂这个问题,我们需要详细梳理 Angular 中 1. 概念澄清:文档里说的“自动清理”指的是什么?当 Angular 文档提到
2. 为什么 Interval 和 Subscription 会泄漏?在你的例子中: effect(() => {
const id = setInterval(() => {
this.count.update(v => v + 1);
}, 1000);
// 如果没有下面这句,就会发生泄漏
// onCleanup(() => clearInterval(id));
});
3.
|
Beta Was this translation helpful? Give feedback.
-
|
这是一个非常顺理成章的进阶问题!在 Angular 的 为了让你彻底搞懂,我们需要先了解 1. 默认行为 vs.
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
posts/angular-features-19-to-21/
Angular 19-21 标志着框架的成熟期——Signals 全面稳定、Zoneless 正式落地、resource/httpResource 响应式数据获取、增量水合等特性让 Angular 焕然一新。
https://rowanliu.com/posts/angular-features-19-to-21/
Beta Was this translation helpful? Give feedback.
All reactions