无 Zone.js 的 Angular
在不使用 Zone.js 的情况下运行 Angular
无 Zone.js 的 Angular 是 CoddyKit 上的免费 Angular Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Angular Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Angular Academy 课程共包含 4 节课。
超越 Zone.js
Zone.js 存在额外开销,并且会修改全局 API。现代 Angular 提供了无区域模式,在该模式下,变更检测由信号和显式通知驱动,而不是依赖区域修改。
启用无区域模式
在引导配置中提供无区域变更检测提供程序。
bootstrapApplication(AppComponent, {
providers: [
provideExperimentalZonelessChangeDetection()
]
});移除 Zone.js
在无区域模式下,您还可以从构建配置中移除 zone.js 垫片,从而减小包大小并降低启动开销。
// angular.json: remove "zone.js" from polyfills
// main.ts: do not import 'zone.js'现在由什么触发检测?
没有区域后,Angular 会在以下情况下安排变更检测:模板中读取的信号发生变化、async 管道发出值、事件绑定触发,或调用了 markForCheck()。
信号处于核心位置
无区域应用高度依赖信号来管理状态。在模板中读取信号会创建依赖关系;更新信号会通知 Angular 刷新该视图。
count = signal(0);
// template: {{ count() }}
this.count.set(5); // schedules CD事件仍会发出通知
模板事件绑定会直接通知 Angular,因此即使没有区域,用户交互仍能继续更新用户界面。
<button (click)="count.update(c => c + 1)">+</button>没有区域时的异步操作
原始的 setTimeout 或非信号异步操作不再自动触发检测。请将这类状态封装在信号中,或调用 markForCheck()。
setTimeout(() => this.ready.set(true), 1000);异步管道兼容性
async 管道在无区域模式下仍然有效,因为它会在每次发出值时显式将视图标记为待检查。
<p>{{ data$ | async }}</p>第三方库
某些库默认依赖 Zone.js 自动检测。在无区域模式下,您可能需要包装它们的回调,以便更新信号或手动调用 markForCheck()。
优点
无区域模式意味着更小的包、更快的启动速度、更少令人意外的额外检测周期,以及更清晰的思维模型:只有您跟踪的状态确实发生变化时,用户界面才会更新。
实验性状态
该提供程序名为 provideExperimentalZonelessChangeDetection,因为其接口仍在趋于稳定。对于新的、以信号为先的应用,可以采用它,但请务必进行充分测试。
快速检查
检验您对无区域 Angular 的理解。
回顾
您了解到,provideExperimentalZonelessChangeDetection() 可以移除对 Zone.js 的需求,并通过信号、事件、异步管道和 markForCheck() 驱动更新,从而构建更小、更快且更可预测的应用。
常见问题解答
「无 Zone.js 的 Angular」课时是免费的吗?
是的 — 「无 Zone.js 的 Angular」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Angular Academy 课程的其余内容,请升级到 CoddyKit PRO。 Angular Academy 课程共包含 4 节课。
「无 Zone.js 的 Angular」这节课中我会学到什么?
在不使用 Zone.js 的情况下运行 Angular 你通过在浏览器中直接运行的动手代码来练习 Angular Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Angular Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Angular Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「无 Zone.js 的 Angular」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Angular Academy 课中编写并运行代码吗?
能。每节 Angular Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 变更检测的工作原理
- OnPush 变更检测
- 无 Zone.js 的 Angular
- 优化列表与渲染