Skip to main content

angular-architecture

Angular architecture: Scope Rule, project structure, file naming, style guide. Trigger: When structuring Angular projects or deciding where to place components.

来源信息

仓库
Gentleman-Programming/Gentleman-Skills
最近来源活动
2026年1月16日 21:48
检测到的 SKILL.md 语言
英语
星标
661
Forks
99

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
angular-architecture
description
Angular architecture: Scope Rule, project structure, file naming, style guide. Trigger: When structuring Angular projects or deciding where to place components.
metadata
{"author":"gentleman-programming","version":"1.0"}
## The Scope Rule (REQUIRED) **"Scope determines structure"** - Where a component lives depends on its usage. | Usage | Placement | |-------|-----------| | Used by 1 feature | `features/[feature]/components/` | | Used by 2+ features | `features/shared/components/` | ### Example ``` features/ shopping-cart/ shopping-cart.ts # Main component = feature name components/ cart-item.ts # Used ONLY by shopping-cart cart-summary.ts # Used ONLY by shopping-cart checkout/ checkout.ts components/ payment-form.ts # Used ONLY by checkout shared/ components/ button.ts # Used by shopping-cart AND checkout modal.ts # Used by multiple features ``` --- ## Project Structure ``` src/app/ features/ [feature-name]/ [feature-name].ts # Main component (same name as folder) components/ # Feature-specific components services/ # Feature-specific services models/ # Feature-specific types shared/ # ONLY for 2+ feature usage components/ services/ pipes/ core/ # App-wide singletons services/ interceptors/ guards/ app.ts app.config.ts routes.ts main.ts ``` --- ## File Naming (REQUIRED) No `.component`, `.service`, `.model` suffixes. The folder tells you what it is. ``` ✅ user-profile.ts ❌ user-profile.component.ts ✅ cart.ts ❌ cart.service.ts ✅ user.ts ❌ user.model.ts ``` --- ## Style Guide ### What We Follow (from official docs) - `inject()` over constructor injection - `class` and `style` bindings over `ngClass`/`ngStyle` - `protected` for template-only members - `readonly` for inputs, outputs, queries - Name handlers for action (`saveUser`) not event (`handleClick`) - Keep lifecycle hooks simple - delegate to well-named methods - One concept per file ```typescript @Component({...}) export class UserProfileComponent { // 1. Injected dependencies private readonly userService = inject(UserService); // 2. Inputs/Outputs readonly userId = input.required<string>(); readonly userSaved = output<User>(); // 3. Internal state private readonly _loading = signal(false); readonly loading = this._loading.asReadonly(); // 4. Computed protected readonly displayName = computed(() => ...); // 5. Methods save(): void { ... } } ``` ### What We Override | Official Says | We Do | Why | |---------------|-------|-----| | `user-profile.component.ts` | `user-profile.ts` | Redundant - folder tells context | | `user.service.ts` | `user.ts` | Same | --- ## Commands ```bash # New project ng new my-app --style=scss --ssr=false # Component in feature ng g c features/products/components/product-card --flat # Service in feature ng g s features/products/services/product --flat # Guard in core ng g g core/guards/auth --functional ``` --- ## Resources - https://angular.dev/style-guide
在 GitHub 查看