Skills Plugins MCP Prompt Model 博客 我的中心

angular

Modern Angular (v20+) expert with deep knowledge of Signals, Standalone Components, Zoneless applications, SSR/Hydration, and reactive patterns.

DeepseekModel 官方收录技能 质量 优秀 · 90 v1.0.0

获取

https://deepseekmodel.com/api/download.php?id=davila7-claude-code-templates-cli-tool-components-skills-development-angular-skill-md&format=skill
下载 .skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name angular description Modern Angular (v20+) expert with deep knowledge of Signals, Standalone Components, Zoneless applications, SSR/Hydration, and reactive patterns. risk safe source self date_added 2026-02-27 Angular Expert Master modern Angular development with Signals, Standalone Components, Zoneless applications, SSR/Hydration, and the latest reactive patterns. When to Use This Skill Building new Angular applications (v20+) Implementing Signals-based reactive patterns Creating Standalone Components and migrating from NgModules Configuring Zoneless Angular applications Implementing SSR, prerendering, and hydration Optimizing Angular performance Adopting modern Angular patterns and best practices Do Not Use This Skill When Migrating from AngularJS (1.x) → use angular-migration skill Working with legacy Angular apps that cannot upgrade General TypeScript issues → use typescript-expert skill Instructions Assess the Angular version and project structure Apply modern patterns (Signals, Standalone, Zoneless) Implement with proper typing and reactivity Validate with build and tests Safety Always test changes in development before production Gradual migration for existing apps (don't big-bang refactor) Keep backward compatibility during transitions Angular Version Timeline Version Release Key Features Angular 20 Q2 2025 Signals stable, Zoneless stable, Incremental hydration Angular 21 Q4 2025 Signals-first default, Enhanced SSR Angular 22 Q2 2026 Signal Forms, Selectorless components 1. Signals: The New Reactive Primitive Signals are Angular's fine-grained reactivity system, replacing zone.js-based change detection. Core Concepts import { signal, computed, effect } from "@angular/core" ; // Writable signal const count = signal ( 0 ); // Read value console . log ( count ()); // 0 // Update value count. set ( 5 ); // Direct set count. update ( ( v ) => v + 1 ); // Functional update // Computed (derived) signal const doubled = computed ( () => count () * 2 ); // Effect (side effects) effect ( () => { console . log ( `Count changed to: ${count()} ` ); }); Signal-Based Inputs and Outputs import { Component , input, output, model } from "@angular/core" ; @Component ({ selector : "app-user-card" , standalone : true , template : ` <div class="card"> <h3>{{ name() }}</h3> <span>{{ role() }}</span> <button (click)="select.emit(id())">Select</button> </div> ` , }) export class UserCardComponent { // Signal inputs (read-only) id = input. required < string >(); name = input. required < string >(); role = input< string >( "User" ); // With default // Output select = output< string >(); // Two-way binding (model) isSelected = model ( false ); } // Usage: // <app-user-card [id]="'123'" [name]="'John'" [(isSelected)]="selected" /> Signal Queries (ViewChild/ContentChild) import { Component , viewChild, viewChildren, contentChild, } from "@angular/core" ; @Component ({ selector : "app-container" , standalone : true , template : ` <input #searchInput /> <app-item *ngFor="let item of items()" /> ` , }) export class ContainerComponent { // Signal-based queries searchInput = viewChild< ElementRef >( "searchInput" ); items = viewChildren ( ItemComponent ); projectedContent = contentChild ( HeaderDirective ); focusSearch ( ) { this . searchInput ()?. nativeElement . focus (); } } When to Use Signals vs RxJS Use Case Signals RxJS Local component state ✅ Preferred Overkill Derived/computed values ✅ computed() combineLatest works Side effects ✅ effect() tap operator HTTP requests ❌ ✅ HttpClient returns Observable Event streams ❌ ✅ fromEvent , operators Complex async flows ❌ ✅ switchMap , mergeMap 2. Standalone Components Standalone components are self-contained and don't require NgModule declarations. Creating Standalone Components import { Component } from "@angular/core" ; import { CommonModule } from "@angular/common" ; import { RouterLink } from "@angular/router" ; @Component ({ selector : "app-header" , standalone : true , imports : [ CommonModule , RouterLink ], // Direct imports template : ` <header> <a routerLink="/">Home</a> <a routerLink="/about">About</a> </header> ` , }) export class HeaderComponent {} Bootstrapping Without NgModule // main.ts import { bootstrapApplication } from "@angular/platform-browser" ; import { provideRouter } from "@angular/router" ; import { provideHttpClient } from "@angular/common/http" ; import { AppComponent } from "./app/app.component" ; import { routes } from "./app/app.routes" ; bootstrapApplication ( AppComponent , { providers : [ provideRouter (routes), provideHttpClient ()], }); Lazy Loading Standalone Components // app.routes.ts import { Routes } from "@angular/router" ; export const routes : Routes = [ { path : "dashboard" , loadComponent : () => import ( "./dashboard/dashboard.component" ). then ( ( m ) => m. DashboardComponent , ), }, { path : "admin" , loadChildren : () => import ( "./admin/admin.routes" ). then ( ( m ) => m. ADMIN_ROUTES ), }, ]; 3. Zoneless Angular Zoneless applications don't use zone.js, improving performance and debugging. Enabling Zoneless Mode // main.ts import { bootstrapApplication } from "@angular/platform-browser" ; import { provideZonelessChangeDetection } from "@angular/core" ; import { AppComponent } from "./app/app.component" ; bootstrapApplication ( AppComponent , { providers : [ provideZonelessChangeDetection ()], }); Zoneless Component Patterns import { Component , signal, ChangeDetectionStrategy } from "@angular/core" ; @Component ({ selector : "app-counter" , standalone : true , changeDetection : ChangeDetectionStrategy . OnPush , template : ` <div>Count: {{ count() }}</div> <button (click)="increment()">+</button> ` , }) export class CounterComponent { count = signal ( 0 ); increment ( ) { this . count . update ( ( v ) => v + 1 ); // No zone.js needed - Signal triggers change detection } } Key Zoneless Benefits Performance : No zone.js patches on async APIs Debugging : Clean stack traces without zone wrappers Bundle size : Smaller without zone.js (~15KB savings) Interoperability : Better with Web Components and micro-frontends 4. Server-Side Rendering & Hydration SSR Setup with Angular CLI ng add @angular/ssr Hydration Configuration // app.config.ts import { ApplicationConfig } from "@angular/core" ; import { provideClientHydration, withEventReplay, } from "@angular/platform-browser" ; export const appConfig : ApplicationConfig = { providers : [ provideClientHydration ( withEventReplay ())], }; Incremental Hydration (v20+) import { Component } from "@angular/core" ; @Component ({ selector : "app-page" , standalone : true , template : ` <app-hero /> @defer (hydrate on viewport) { <app-comments /> } @defer (hydrate on interaction) { <app-chat-widget /> } ` , }) export class PageComponent {} Hydration Triggers Trigger When to Use on idle Low-priority, hydrate when browser idle on viewport Hydrate when element enters viewport on interaction Hydrate on first user interaction on hover Hydrate when user hovers on timer(ms) Hydrate after specified delay 5. Modern Routing Patterns Functional Route Guards // auth.guard.ts import { inject } from "@angular/core" ; import { Router , CanActivateFn } from "@angular/router" ; import { AuthService } from "./auth.service" ; export const authGuard : CanActivateFn = ( route, state ) => { const auth = inject ( AuthService ); const router = inject ( Router ); if (auth. isAuthenticated ()) { return true ; } return router. createUrlTree ([ "/login" ], { queryParams : { returnUrl : state. url }, }); }; // Usage in routes export const routes : Routes = [ { path : "dashboard" , loadComponent : () => import ( "./dashboard.component" ), canActivate : [authGuard], }, ]; Route-Level Data Resolvers import { inject } from '@angular/core' ; import { ResolveFn } from '@angular/router' ; import { UserService } from './user.service' ; import { User } from './user.model' ; export const userResolver : ResolveFn < User > = ( route ) => { const userService = inject ( UserService ); return userService. getUser (route. paramMap . get ( 'id' )!); }; // In routes { path : 'user/:id' , loadComponent : () => import ( './user.component' ), resolve : { user : userResolver } } // In component export class UserComponent { private route = inject ( ActivatedRoute ); user = toSignal ( this . route . data . pipe ( map ( d => d[ 'user' ]))); } 6. Dependency Injection Patterns Modern inject() Function import { Component , inject } from '@angular/core' ; import { HttpClient } from '@angular/common/http' ; import { UserService } from './user.service' ; @Component ({...}) export class UserComponent { // Modern inject() - no constructor needed private http = inject ( HttpClient ); private userService = inject ( UserService ); // Works in any injection context users = toSignal ( this . userService . getUsers ()); } Injection Tokens for Configuration
Agent 识别该技能的关键词,点击任意一个即可复制。

该技能未提供触发词。

下载的 .skill 包内含以下字段。
字段 说明
format格式标识(skill/v1)
skill_id技能唯一 ID
name技能名称
version版本号
description技能描述
category所属分类(数组)
trigger_words触发词列表
tags标签列表
source来源标识
source_url来源链接(本页地址)
exported_at导出时间(每次下载生成)
system_prompt系统提示词正文
model_config模型参数:provider / model / temperature / max_tokens / top_p
examples示例
install_guide各平台导入说明(Coze / Dify / Claude / 自定义框架)
同一份技能可按不同平台格式导出。
.skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用 下载
.skillpro 增强格式,额外含脚本 / 工具 / 依赖 / 钩子占位 下载
.json 纯 JSON 导出,只含 system_prompt 与模型参数 下载
Coze 带 frontmatter 的 Markdown,Coze 平台导入用 下载
Dify Dify DSL,创建应用后直接导入 下载

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

验证码 --

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。