# 1. Angular 的依赖注入容器与模块化体系(NgModule/Standalone)的演进,Standalone 何时必选? A 必须声明在某个 NgModule 中才能被使用 B 只能在路由配置中声明依赖,无法在组件内声明 C 通过 @Component 的 imports 数组直接引用其他独立组件、指令与管道 ✓ 正确答案 D 依赖只能通过全局 provide 注册,不能写在组件上
# 2. Angular 变更检测(Zone.js vs Signals)的原理,onPush 策略如何正确使用? A 修改输入对象内部字段后会自动触发视图更新 B 信号是 zoneless 变更检测的基础设施,可减少不必要的变更检测 ✓ 正确答案 C Zone.js 只对 Promise 打补丁,其他异步 API 不受影响 D onPush 组件设置后模板永远不会再更新
# 3. Angular 依赖注入的作用域层级(root/平台/组件)与 provide 函数的现代写法? A provideIn: 'root' 的服务每次注入都会创建新实例 B provide 系列函数比传统 providers 写法的类型检查更弱 C 组件级提供者创建的实例生命周期跟随组件,组件销毁时一并释放 ✓ 正确答案 D provide 函数只能在模块级使用
# 4. Angular 19+ 的模板新语法,@let 局部变量、@if/@for/@defer 控制流与事件重放(event replay)在企业模板升级中的工程价值? A 事件重放会在水合前丢弃用户的所有点击 B 会在组件声明时立即加载所有被延迟的组件 C @let 用于在组件类中声明成员变量 D @defer 可按触发条件懒加载组件块,削减首屏包体 ✓ 正确答案
# 5. RxJS 在 Angular 中的核心地位,表单、路由守卫与状态流如何用 Observable 组织? A AsyncPipe 订阅后必须手动调用 unsubscribe 清理 B 响应式表单的 valueChanges 是只发射一次的同步事件 C BehaviorSubject 不保存当前值,只广播新值 D 路由守卫可以返回 Observable 来完成异步鉴权判断 ✓ 正确答案
# 6. Angular 表单(模板驱动/响应式)的校验与性能要点? A onPush 组件中无法使用响应式表单 B 模板驱动表单需要手动构建 FormControl 模型 C 异步校验器会同步阻塞表单交互 D 响应式表单的校验器是纯函数,便于组合与单元测试 ✓ 正确答案
# 7. Angular 的懒加载、预加载与渲染模式(SSR/Prerender)如何选型? A 自定义 PreloadingStrategy 可以按条件决定预加载哪些路由 ✓ 正确答案 B Prerender 适合高频个性化内容较多的应用 C loadChildren 会在应用启动时加载所有路由模块 D SSR 与路由懒加载不能同时使用
# 8. Angular 控制流语法(@if/@for/@defer)与旧 *ngIf/*ngFor 的性能差异? A *ngFor 不提供 trackBy 时也会自动做 keyed 复用 B 内置 @for 支持 track 表达式,可优化列表更新的 DOM 复用 ✓ 正确答案 C @defer 与按需加载无关,只影响样式 D 内置控制流无法对模板表达式做类型收窄
# 9. Angular SSR 与 Hydration、Event Replay 的工程配置? A provideClientHydration() 用于开启客户端水合,复用服务端渲染的 DOM ✓ 正确答案 B 服务端渲染出的 HTML 不会发送给浏览器 C Event Replay 会在水合前直接丢弃用户点击 D SSR 场景下服务端请求过的数据客户端必须重新请求一遍
# 10. Angular 的 DI 体系,providers 层级与注入令牌? A 组件可以从兄弟组件的注入器中直接获取服务实例 B InjectionToken 用于标识非类类型的依赖,避免字符串魔法值冲突 ✓ 正确答案 C useValue 提供者不能用于注入配置对象 D 依赖解析是自上而下进行的
# 11. Angular 18+/20 的新特性(Control Flow、defer、Signals 全链路)对企业项目升级的影响? A 移除 Zone.js 对依赖异步回调更新视图的旧代码没有影响 B Angular 19 仍强制要求所有组件声明在 NgModule 中 C ng update 提供自动化迁移工具帮助升级新特性 ✓ 正确答案 D Signals 与 RxJS 互不兼容,不能一起使用
# 12. Angular 表单(响应式)的 ValueChanges 与异步校验的性能陷阱? A valueChanges 只在表单提交时发射一次 B 异步校验订阅链中使用 switchMap 可以避免过期结果覆盖新结果 ✓ 正确答案 C 订阅 valueChanges 不需要在组件销毁时清理 D debounceTime 会提高 valueChanges 的发射频率
# 13. Angular 的信号(Signals),响应式新机制? A computed() 每次被读取都会重新计算 B 信号写入会触发整棵组件树的全量变更检测 C 信号只能在组件类内部使用,无法跨组件共享 D effect() 自动跟踪其读取的信号,依赖变化时重新执行 ✓ 正确答案
# 14. Angular 的变更检测,Zone.js 与 zoneless? A 信号是 Angular zoneless 变更检测的关键基础设施 ✓ 正确答案 B zoneless 模式仍然依赖 Zone.js 打补丁来触发检测 C Zone.js 能够精确知道哪个组件需要更新 D AsyncPipe 与 zoneless 变更检测没有关系
# 15. Angular 的模块与独立组件,NgModule vs standalone? A NgModule 比 standalone 更利于 tree-shaking 优化 B standalone 组件必须声明在某个 NgModule 中才能被路由懒加载 C standalone 组件通过 imports 数组直接声明自身依赖,无需 NgModule 包装 ✓ 正确答案 D standalone 与 NgModule 无法在同一个应用中混用
# 16. Angular 的 RxJS,响应式状态与异步处理? A BehaviorSubject 只会发射初始值,之后不再广播 B HttpClient 的 get 方法返回的是 Promise C async 管道会自动管理 Observable 的订阅与退订 ✓ 正确答案 D toSignal 是 Vue 框架提供的 API
# 17. Angular 的全局错误处理,自定义 ErrorHandler、Zone 错误与 signals 时代错误边界的设计? A ErrorHandler 会自动渲染用户可见的错误提示界面 B 自定义 ErrorHandler 常用于全局日志采集与监控上报 ✓ 正确答案 C @defer 没有 error 状态可处理懒加载失败 D signals 时代 effect 内抛出的错误会被框架自动忽略