🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx skills add https://skills.sh/angular/angular/angular-developer

💡 提示:需要 Node.js 和 NPM

Angular 开发者指南

  1. 在提供指导之前,务必先分析项目的 Angular 版本,因为最佳实践和可用功能在不同版本之间可能存在显著差异。如果使用 Angular CLI 创建新项目,除非用户有要求,否则不要指定版本。
  2. 生成代码时,请遵循 Angular 的风格指南和最佳实践,以确保可维护性和性能。使用 Angular CLI 搭建组件、服务、指令、管道和路由,以保证一致性。
  3. 完成代码生成后,运行 ng build 确保没有构建错误。如果存在错误,请分析错误信息并在继续之前修复它们。不要跳过此步骤,这对于确保生成的代码正确且功能正常至关重要。

创建新项目

如果用户未提供任何指导,以下是创建新 Angular 项目时要遵循的默认规则:

  1. 除非用户另有指定,否则使用最新的稳定版 Angular。
  2. 在新项目中使用信号表单进行表单管理(适用于 Angular v21 及更新版本) 了解更多

ng new 的执行规则:
当被要求创建新的 Angular 项目时,您必须通过以下严格步骤确定正确的执行命令:

步骤 1:检查用户是否明确指定版本。

  • 如果 用户请求特定版本(例如 Angular 15),则绕过本地安装,严格使用 npx
  • 命令: npx @angular/cli@<请求的版本> ng new <项目名称>

步骤 2:检查是否已有 Angular 安装。

  • 如果 未请求特定版本,请在终端中运行 ng version 以检查系统上是否已安装 Angular CLI。
  • 如果 命令成功并返回已安装的版本,则直接使用本地/全局安装。
  • 命令: ng new <项目名称>

步骤 3:回退到最新版本。

  • 如果 未请求特定版本,并且 ng version 命令失败(表示未安装 Angular),则必须使用 npx 获取最新版本。
  • 命令: npx @angular/cli@latest ng new <项目名称>

组件

在处理 Angular 组件时,请根据任务查阅以下参考资料:

  • 基础知识:组件的结构、元数据、核心概念和模板控制流(@if, @for, @switch)。阅读 components.md
  • 输入 (Inputs):基于信号的输入、转换和模型输入。阅读 inputs.md
  • 输出 (Outputs):基于信号的输出和自定义事件的最佳实践。阅读 outputs.md
  • 宿主元素 (Host Elements):宿主绑定和属性注入。阅读 host-elements.md

如果您需要上述参考资料中未包含的更深入的文档,请阅读 https://angular.dev/guide/components 上的文档。

响应式与数据管理

在管理状态和数据响应式时,请使用 Angular 信号并查阅以下参考资料:

  • 信号概述:核心信号概念(signalcomputed)、响应式上下文和 untracked。阅读 signals-overview.md
  • 依赖状态 (linkedSignal):创建与源信号关联的可写状态。阅读 linked-signal.md
  • 异步响应式 (resource):直接将异步数据获取到信号状态中。阅读 resource.md
  • 副作用 (effect):日志记录、第三方 DOM 操作(afterRenderEffect),以及何时不使用 effect。阅读 effects.md

表单

在大多数新应用中,优先使用信号表单。在做出表单决策时,分析项目并考虑以下准则:

  • 如果应用程序使用的是 v21 或更新版本,并且这是一个新表单,优先使用信号表单
    – 对于较旧的应用或处理现有表单时,请使用与应用当前表单策略相匹配的适当表单类型。
  • 信号表单:使用信号进行表单状态管理。阅读 signal-forms.md
  • 模板驱动表单:用于简单表单。阅读 template-driven-forms.md
  • 响应式表单:用于复杂表单。阅读 reactive-forms.md

依赖注入

在 Angular 中实现依赖注入时,请遵循以下准则:

  • 基础知识:依赖注入概述、服务以及 inject() 函数。阅读 di-fundamentals.md
  • 创建和使用服务:创建服务、providedIn: 'root' 选项,以及将其注入到组件或其他服务中。阅读 creating-services.md
  • 定义依赖提供者:自动与手动提供、InjectionTokenuseClassuseValueuseFactory 和作用域。阅读 defining-providers.md
  • 注入上下文:允许使用 inject() 的位置、runInInjectionContextassertInInjectionContext。阅读 injection-context.md
  • 层级注入器EnvironmentInjectorElementInjector 的对比、解析规则、修饰符(optionalskipSelf)以及 providersviewProviders。阅读 hierarchical-injectors.md

Angular Aria

在为以下任何模式构建可访问的自定义组件时:手风琴 (Accordion)、列表框 (Listbox)、组合框 (Combobox)、菜单 (Menu)、选项卡 (Tabs)、工具栏 (Toolbar)、树 (Tree)、网格 (Grid),请查阅以下参考资料:

  • Angular Aria 组件:构建无样式、可访问的组件(手风琴、列表框、组合框、菜单、选项卡、工具栏、树、网格)以及设置 ARIA 属性的样式。阅读 angular-aria.md

路由

在 Angular 中实现导航时,请查阅以下参考资料:

  • 定义路由:URL 路径、静态与动态片段、通配符和重定向。阅读 define-routes.md
  • 路由加载策略:急切加载与懒加载,以及上下文感知加载。阅读 loading-strategies.md
  • 使用 Outlet 显示路由:使用 <router-outlet>、嵌套 Outlet 和具名 Outlet。阅读 show-routes-with-outlets.md
  • 导航到路由:使用 RouterLink 进行声明式导航和使用 Router 进行程序化导航。阅读 navigate-to-routes.md
  • 使用守卫控制路由访问:实现 CanActivateCanMatch 和其他安全守卫。阅读 route-guards.md
  • 数据解析器:使用 ResolveFn 在路由激活前预取数据。阅读 data-resolvers.md
  • 路由器生命周期与事件:导航事件的时间顺序和调试。阅读 router-lifecycle.md
  • 渲染策略:客户端渲染 (CSR)、静态站点生成 (Prerendering) 和带有水合的服务端渲染 (SSR)。阅读 rendering-strategies.md
  • 路由过渡动画:启用和自定义视图过渡 API。阅读 route-animations.md

如果您需要更深入的文档或更多上下文,请访问 官方 Angular 路由指南

样式与动画

在 Angular 中实现样式和动画时,请查阅以下参考资料:

  • 在 Angular 中使用 Tailwind CSS:将 Tailwind CSS 集成到 Angular 项目中。阅读 tailwind-css.md
  • Angular 动画:使用原生 CSS(推荐)或传统 DSL 实现动态效果。阅读 angular-animations.md
  • 组件样式:组件样式和封装的最佳实践。阅读 component-styling.md

测试

在编写或更新测试时,请根据任务查阅以下参考资料:

  • 基础知识:单元测试(Vitest)的最佳实践、异步模式和 TestBed。阅读 testing-fundamentals.md
  • 组件测试工具 (Harnesses):用于健壮组件交互的标准模式。阅读 component-harnesses.md
  • 路由测试:使用 RouterTestingHarness 进行可靠的导航测试。阅读 router-testing.md
  • 端到端 (E2E) 测试:使用 Cypress 进行 E2E 测试的最佳实践。阅读 e2e-testing.md

工具

在处理 Angular 工具时,请查阅以下参考资料:

  • Angular CLI:创建应用程序、生成代码(组件、路由、服务)、服务和构建。阅读 cli.md
  • Angular MCP 服务器:可用工具、配置和实验性功能。阅读 mcp.md

📄 原始文档

完整文档(英文):

https://skills.sh/angular/angular/angular-developer

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。