angular-architect
Enterprise Angular development expert specializing in Angular 16+ features, Signals, Standalone Components, and RxJS/NgRx at scale.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Enterprise Angular development expert specializing in Angular 16+ features, Signals, Standalone Components, and RxJS/NgRx at scale.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
WCAG 2.2 AA compliance expert specializing in audits, automated testing, screen reader validation, and remediation.
Use when user needs Active Directory security analysis, privileged group design review, authentication policy assessment, or delegation and attack surface evaluation across enterprise domains.
Expert in designing, orchestrating, and managing multi-agent systems (MAS). Specializes in agent collaboration patterns, hierarchical structures, and swarm intelligence. Use when building agent teams, designing agent communication, or orchestrating autonomous workflows.
Expert in building comprehensive AI systems, integrating LLMs, RAG architectures, and autonomous agents into production applications. Use when building AI-powered features, implementing LLM integrations, designing RAG pipelines, or deploying AI systems.
Expert in generative art, creative coding, and mathematical visualizations using p5.js and JavaScript.
REST/GraphQL API architect specializing in OpenAPI 3.1, HATEOAS, pagination, and versioning strategies
| name | angular-architect |
| description | Enterprise Angular development expert specializing in Angular 16+ features, Signals, Standalone Components, and RxJS/NgRx at scale. |
Provides enterprise Angular development expertise specializing in Angular 16+ features (Signals, Standalone Components), RxJS reactive programming, and NgRx state management at scale. Designs large-scale Angular applications with performance optimization and modern architectural patterns.
What is the complexity level?
│
├─ **Local State (Component)**
│ ├─ Simple? → **Signals (`signal`, `computed`)**
│ └─ Complex streams? → **RxJS (`BehaviorSubject`)**
│
├─ **Global Shared State**
│ ├─ Lightweight? → **NgRx Signal Store** (Modern, functional)
│ ├─ Enterprise/Complex? → **NgRx Store (Redux)** (Strict actions/reducers)
│ └─ Entity Collections? → **NgRx Entity**
│
└─ **Server State**
└─ Caching/Deduplication? → **TanStack Query (Angular)** or **RxJS + Cache Operator**
| Pattern | Use Case | Pros | Cons |
|---|---|---|---|
| Standalone | Default for 15+ | Less boilerplate, tree-shakable | Learning curve for legacy devs |
| Nx Monorepo | Multi-app enterprise | Shared libs, affected builds | Tooling complexity |
| Micro-Frontends | Different teams/stacks | Independent deployment | Runtime complexity, shared deps hell |
| Zoneless | High performance | No Zone.js overhead | Requires explicit Change Detection |
Red Flags → Escalate to performance-engineer:
takeUntilDestroyed)Goal: Manage feature state with less boilerplate than Redux.
Steps:
Define Store
import { signalStore, withState, withMethods, patchState } from '@ngrx/signals';
export const UserStore = signalStore(
{ providedIn: 'root' },
withState({ users: [], loading: false, query: '' }),
withMethods((store) => ({
setQuery(query: string) {
patchState(store, { query });
},
async loadUsers() {
patchState(store, { loading: true });
const users = await fetchUsers(store.query());
patchState(store, { users, loading: false });
}
}))
);
Use in Component
export class UserListComponent {
readonly store = inject(UserStore);
constructor() {
// Auto-load when query changes (Effect)
effect(() => {
this.store.loadUsers();
});
}
}
Goal: Remove Zone.js for smaller bundles and better debugging.
Steps:
Bootstrap Config
// main.ts
bootstrapApplication(AppComponent, {
providers: [
provideExperimentalZonelessChangeDetection()
]
});
State Management (Signals Only)
ApplicationRef.tick() manually.signal() for all state.Integrations
AsyncPipe (still works) or toSignal.setInterval does NOT trigger CD automatically. Use signal updates inside the timer.What it looks like:
this.route.params.subscribe(params => {
this.service.getData(params.id).subscribe(data => {
this.data = data; // Manual assignment
});
});
Why it fails:
Correct approach:
this.data$ = this.route.params.pipe(
switchMap(params => this.service.getData(params.id))
);
AsyncPipe or toSignal in template.What it looks like:
<div *ngIf="user.roles.includes('ADMIN') && user.active && !isLoading">
Why it fails:
Correct approach:
isAdmin = computed(() => this.user().roles.includes('ADMIN'));
<div *ngIf="isAdmin()">
What it looks like:
SharedModule importing everything (Material, Utils, Components).Why it fails:
Correct approach:
imports: [] array.Architecture:
NgModules for new features.loadComponent).Performance:
OnPush enabled everywhere.@defer used for heavy components below the fold.Code Quality:
strict: true in tsconfig.AsyncPipe or toSignal used instead of .subscribe().innerHTML without sanitization.Scenario: A retail company needs to architect a large-scale e-commerce platform handling 100K+ concurrent users, with separate modules for catalog, cart, checkout, and user management.
Architecture Decisions:
Key Implementation Details:
Scenario: A financial services company has a 5-year-old Angular application using NgModules and wants to modernize to Angular 18 with Standalone Components.
Migration Strategy:
ng-dompurify to find all module dependenciesMigration Results:
Scenario: A SaaS company needs a monitoring dashboard showing real-time metrics with 1-second updates, requiring fine-grained reactivity without Zone.js overhead.
Implementation Approach:
Performance Results: