ワンクリックで
angular
Angular 21+ 前端开发规范(standalone/Material/signals)。用于 Angular 组件/页面/路由/表单、Material UI、signals 状态、i18n、前端样式与交互相关任务。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Angular 21+ 前端开发规范(standalone/Material/signals)。用于 Angular 组件/页面/路由/表单、Material UI、signals 状态、i18n、前端样式与交互相关任务。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Microsoft Agent Framework 1.1 (C#) 开发规范与集成要点。USE FOR: ChatClientAgent、AIFunctionFactory、IChatClient tools、AgentThread/Conversation、ResponseFormat、Handoff/Workflow、MCP tool、Memory/ContextProvider、Observability、Foundry Local OpenAI 兼容接入。
Perigon 主入口技能:用于基于 Perigon CLI/MCP 进行项目脚手架、模块与服务生成、DTO/Manager/Controller/Request 客户端生成、MCP 配置与 Studio 操作,并在后端与前端开发中按照模板约定完成代码生成与落地。Use when: any Perigon-based development task, scaffolding, code generation, module/service creation, API client generation, MCP setup, Studio usage, backend/frontend implementation that should follow Perigon conventions.
ASP.NET Core / Aspire / TUnit 测试规范与最佳实践。用于集成测试/ApiTest、测试用例编写、测试失败排查与验证流程。
全栈代码审查规范(质量/性能/安全/架构/风格)。用于 Code Review、PR 审查、质量门禁、安全与性能检查等任务。
技术文档编写规范 - README、任务分配文档、开发指南、部署文档
| name | angular |
| description | Angular 21+ 前端开发规范(standalone/Material/signals)。用于 Angular 组件/页面/路由/表单、Material UI、signals 状态、i18n、前端样式与交互相关任务。 |
本技能适用于使用 Angular 框架进行前端开发的任务。
src/
├── main.ts # 应用入口
├── app/
│ ├── app.config.ts # 应用配置
│ ├── app.routes.ts # 路由配置
│ ├── layout/ # 布局容器
│ ├── pages/ # 页面组件
│ ├── share/
│ │ ├── components/ # 共享组件
│ │ ├── pipe/ # 管道
│ │ ├── auth.guard.ts # 路由守卫
│ │ ├── custom-paginator-intl.ts
│ │ └── i18n-keys.ts # i18n 键定义
│ └── services/ # 服务和 API 客户端
├── assets/
│ └── i18n/*.json # 多语言文件
├── environments/ # 环境配置
├── styles/
│ ├── styles.scss # 全局样式
│ ├── theme.scss # Material 主题
│ └── vars.scss # CSS 变量
└── proxy.conf.json # 开发代理配置
trackBy 函数
generate request或perigon mcp工具,根据后端swagger文件生成前端代码,
outputPath参数为前端项目根目录下的\src\app目录的绝对路径(生成错了要删除)。优先通过使用 MCP 工具生成组件,Perigon提供通过razor 模板生成代码的能力,以获取可参考的代码结构和示例。
特别注意:生成的请求服务代码不要添加或修改,它是与接口保持一致的,包括类型定义,切勿重复定义类型。
npm run build
npm run start # 启动开发服务器,实时查看编译错误
修改代码 → 构建 → 发现错误 → 修复 → 重新构建,直到无错误
enumText管道:用于将枚举值转换为对应的文本显示。toKeyValue管道:用于将枚举类型转换为键值对数组,以便在选项列表中使用。具备良好的交互常识和布局和审美。要考虑排版、边距,文字大小,颜色搭配,组件间距等,优先参考已定义好的theme.scss中的样式变量和组件样式,保持整体风格一致。
组件选择:
样式层级:
styles.scss - 基础样式和重置theme.scss - Material 主题定制vars.scss - 颜色、间距等变量.scss 文件 - 局部样式样式规范(重要):
theme.scss中定义的 Material 主题和组件样式变量,优先使用这些样式。translate 管道进行文本翻译Reactive Forms(推荐):
import { FormControl, FormGroup } from '@angular/forms';
userForm = new FormGroup({
name: new FormControl('', [Validators.required]),
email: new FormControl('', [Validators.required, Validators.email])
});
// 类型安全
get nameControl() {
return this.userForm.get('name') as FormControl;
}
表单规范:
[formControl],不要用 formControlName模板示例:
<!-- ✅ 推荐:使用 [formControl] + getter,避免字符串硬编码 -->
<form [formGroup]="form">
<mat-form-field>
<mat-label>Name</mat-label>
<input matInput [formControl]="name" />
@if (name.errors) {
<mat-error>{{ getValidatorMessage(name) }}</mat-error>
}
</mat-form-field>
</form>
组件示例(通过 getter 访问):
export class UserForm {
form = this.fb.group({
name: ['', [Validators.required, Validators.maxLength(100)]],
email: ['', [Validators.required, Validators.email]]
});
// ✅ 通过 getter 访问控件,避免字符串,便于复用和重构
get name() { return this.form.get('name') as FormControl; }
get email() { return this.form.get('email') as FormControl; }
getValidatorMessage(control: AbstractControl | null): string {
if (!control || !control.errors) { return ''; }
const errors = control.errors;
const key = Object.keys(errors)[0];
const params = errors[key];
return this.translate.instant(`validation.${key.toLowerCase()}`, params);
}
}
app/services/admin-client.ts / 自定义客户端base.service.tsmodels/ 和 services/app/app.routes.tsapp/pages/*app/layout/*认证守卫:
app/share/auth.guard.tsauth.service.ts 使用翻译文件:
assets/i18n/*.jsonapp/share/i18n-keys.tsscripts/i18n-keys.jsJSON 文件:
{
"common": {
"save": "保存",
"cancel": "取消",
"delete": "删除"
},
"user": {
"list": "用户列表",
"detail": "用户详情"
}
}
使用方式:
<button>{{ i18nKeys.common.save | translate }}</button>
注意事项:
@for 循环必须包含 track 表达式*matHeaderRowDef / *matRowDef 保留不变(这些是 Material 特有指令)*ngIf / *ngFor,应该使用 @if / @for 语法