ionic-angular — скилл для Claude Code: Angular-паттерны в Ionic
Скилл для ИИ-агента, который ведёт по Angular-паттернам в Ionic: навигация, ленивая загрузка, формы, хуки жизненного цикла страниц.
npx skills add capawesome-team/skills --skill ionic-angular -a claude-codeЧто делает ionic-angular
Скилл помогает агенту разобраться в проекте на Ionic с Angular и не путать архитектуры. Он сам читает package.json, src/main.ts и src/app/, определяет версии Ionic и Angular, находит bootstrapApplication или platformBrowserDynamic().bootstrapModule, проверяет наличие Capacitor и тип навигации — вкладки или боковое меню. Спрашивать это у вас не будут.
Дальше агент идёт по темам по одной: структура проекта, различия standalone и NgModule, маршрутизация Angular вместе с ion-tabs, ion-menu и модалками, ленивая загрузка через loadComponent или loadChildren, хуки ionViewWillEnter и ionViewDidEnter, реактивные формы с ion-input и ion-select, сервисы и состояние на BehaviorSubject или сигналах, CanActivateFn в гардах. Импорты подстраиваются под архитектуру: для standalone — из @ionic/angular/standalone, для NgModule — IonicModule в модуле страницы.
Нужны Node.js, npm и Ionic CLI, а сам проект — на Ionic Framework 7 или 8 с @ionic/angular и Angular 16+. Скилл не создаёт новое Ionic-приложение с нуля, не обновляет версии Ionic и не трогает Capacitor-плагины. Если у вас React или Vue, он тоже не пригодится.
Какие задачи решает
- определить, на standalone или NgModule собран проект, и не сломать импорты
- связать Angular Router с навигацией Ionic: вкладки, боковое меню, модалки
- настроить ленивую загрузку страниц через
loadComponentиloadChildren - выбрать правильный хук жизненного цикла для обновления данных на странице
- подключить реактивные формы к
ion-inputиion-selectс показом ошибок
Примеры запросов агенту
- посмотри мой Ionic-проект и скажи, standalone он или NgModule
- настрой ленивую загрузку для страницы профиля
- почему данные не обновляются при возврате на страницу — разберись с хуками
Как установить ionic-angular
1Через Skills CLI (Vercel)
npx skills add capawesome-team/skills --skill ionic-angular -a claude-code2Вручную: положить файлы
~/.claude/skills/ionic-angular/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/ionic-angular/
1Через Skills CLI (Vercel)
npx skills add capawesome-team/skills --skill ionic-angular -a codex2Вручную: положить файлы
.agents/skills/ionic-angular/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add capawesome-team/skills --skill ionic-angular -a cursor2Вручную: положить файлы
.cursor/skills/ionic-angular/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install capawesome-team/skills ionic-angular2Вручную: положить файлы
.github/skills/ionic-angular/SKILL.md1Через Skills CLI (Vercel)
npx skills add capawesome-team/skills --skill ionic-angular -a gemini-cli2Командой платформы
gemini skills install https://github.com/capawesome-team/skills --path skills/ionic-angularВручную: положить файлы
.devin/skills/ionic-angular/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add capawesome-team/skills --skill ionic-angular -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора20
Похожие
Рядом в теме «Мобильная разработка»
Всё по теме «Мобильная разработка» →Вопросы о ionic-angular
Как установить ionic-angular в Claude?
Выполните npx skills add capawesome-team/skills --skill ionic-angular -a claude-code. После этого файл скилла окажется в ~/.claude/skills/ionic-angular/SKILL.md.
Что делает ionic-angular?
Ведёт агента по Angular-паттернам в Ionic: структура проекта, навигация, ленивая загрузка, хуки страниц, формы, сервисы и гарды. Сначала скилл сам определяет архитектуру проекта, потом даёт примеры под неё.
Для каких проектов он не подходит?
Он не создаёт новое Ionic-приложение с нуля, не обновляет версии Ionic и не занимается интеграцией Capacitor-плагинов. Для React и Vue тоже не подойдёт.
Исходный текст
SKILL.md · MIT
---
name: ionic-angular
description: "Guides the agent through Angular-specific patterns for Ionic app development. Covers project structure, standalone vs NgModule architecture detection, Angular Router integration with Ionic navigation (tabs, side menu, modals), lazy loading, Ionic page lifecycle hooks, reactive forms with Ionic input components, Angular services for state management, route guards, performance optimization, and testing. Do not use for creating a new Ionic app from scratch, upgrading Ionic versions, general Ionic component usage unrelated to Angular, Capacitor plugin integration, or non-Angular frameworks (React, Vue)."
license: MIT
compatibility: "Requires Node.js, npm, and the Ionic CLI."
metadata:
author: capawesome-team
source: https://github.com/capawesome-team/skills/tree/main/skills/ionic-angular
---
# Ionic Angular
Ionic development with Angular — project structure, Angular-specific components, navigation, lazy loading, forms, and lifecycle integration.
## Prerequisites
1. **Ionic Framework 7 or 8** with `@ionic/angular`.
2. **Angular 16+** (Angular 17+ recommended for standalone architecture).
3. Node.js and npm installed.
4. Ionic CLI installed (`npm install -g @ionic/cli`).
## Agent Behavior
- **Auto-detect architecture.** Check `src/main.ts` for `bootstrapApplication` (standalone) vs. `platformBrowserDynamic().bootstrapModule` (NgModule). Adapt all code examples to the detected architecture.
- **Guide step-by-step.** Walk the user through one topic at a time.
- **Adapt imports.** For standalone components, import each Ionic component from `@ionic/angular/standalone`. For NgModule components, import `IonicModule` in the page module.
## Procedures
### Step 1: Analyze the Project
Auto-detect the following by reading project files — do **not** ask the user for information that can be inferred:
1. **Ionic version**: Read `@ionic/angular` version from `package.json`.
2. **Angular version**: Read `@angular/core` version from `package.json`.
3. **Architecture**: Check `src/main.ts` for `bootstrapApplication` (standalone) or `platformBrowserDynamic().bootstrapModule` (NgModule). If `src/app/app.module.ts` exists and imports `IonicModule`, confirm NgModule.
4. **Capacitor**: Check if `@capacitor/core` is in `package.json`. Check for `android/` and `ios/` directories.
5. **Routing**: Check for `src/app/app.routes.ts` (standalone) or `src/app/app-routing.module.ts` (NgModule).
6. **Navigation pattern**: Check `src/app/` for a `tabs/` directory (tab-based) or `ion-menu` usage in templates (side menu).
### Step 2: Understand Project Structure
Read `references/project-structure.md` for the standard Ionic Angular directory layout.
Key points:
- **Standalone projects** have `app.config.ts`, `app.routes.ts`, and standalone page components.
- **NgModule projects** have `app.module.ts`, `app-routing.module.ts`, and per-page `*.module.ts` files.
- Ionic config lives in `ionic.config.json`.
- Theme variables are in `src/theme/variables.scss`.
- Global styles and Ionic CSS imports are in `src/global.scss`.
### Step 3: Understand Architecture Differences
Read `references/standalone-vs-ngmodules.md` for detailed differences.
Summary:
| Aspect | Standalone | NgModule |
| ----------------- | ----------------------------------------------- | ------------------------------------------- |
| Bootstrap | `bootstrapApplication` in `main.ts` | `platformBrowserDynamic().bootstrapModule` |
| Ionic setup | `provideIonicAngular({})` in `app.config.ts` | `IonicModule.forRoot()` in `app.module.ts` |
| Component imports | Import each Ionic component per file | `IonicModule` provides all globally |
| Import source | `@ionic/angular/standalone` | `@ionic/angular` |
| Lazy loading | `loadComponent` in routes | `loadChildren` in routes |
| Icon registration | `addIcons()` from `ionicons` required | Automatic |
| Tree-shaking | Yes | No |
### Step 4: Set Up Navigation
Read `references/navigation.md` for full navigation patterns.
Topics covered:
- **Route configuration** — defining routes with lazy loading for both architectures.
- **Root component layout** — `<ion-app>` with `<ion-router-outlet>`.
- **Template navigation** — `routerLink` with `routerDirection` for transition animations.
- **Programmatic navigation** — `NavController` (`navigateForward`, `navigateBack`, `navigateRoot`, `back`).
- **Route parameters** — reading params via `ActivatedRoute`.
- **Tab navigation** — `<ion-tabs>` with child routes per tab.
- **Side menu** — `<ion-menu>` with `<ion-menu-toggle>` and child routes.
- **Route guards** — functional guards (Angular 15.2+) with `CanActivateFn`.
- **Modals** — `ModalController` for overlay navigation with data passing.
- **Linear vs. non-linear routing** — when to use each pattern.
### Step 5: Implement Lifecycle Hooks
Read `references/lifecycle.md` for Ionic page lifecycle hook details.
Key rules:
- `ngOnInit` fires **once** (first creation). Use for one-time setup.
- `ionViewWillEnter` fires on **every** page visit. Use for refreshing data.
- `ionViewDidEnter` fires after the transition animation. Use for heavy work that would block animations.
- `ionViewWillLeave` fires before leaving. Use for cleanup, pausing subscriptions.
- `ngOnDestroy` fires when the page is popped from the navigation stack. Use for final cleanup.
- Implement interfaces `ViewWillEnter`, `ViewDidEnter`, `ViewWillLeave`, `ViewDidLeave` from `@ionic/angular`.
### Step 6: Build Forms
Read `references/forms.md` for form patterns with Ionic components.
Topics covered:
- **Reactive forms** — `FormBuilder`, `FormGroup`, `Validators` with Ionic input components.
- **Template-driven forms** — `[(ngModel)]` with `FormsModule`.
- **Ionic form components** — `ion-input`, `ion-textarea`, `ion-select`, `ion-checkbox`, `ion-toggle`, `ion-radio-group`, `ion-range`, `ion-datetime`.
- **Validation display** — `errorText` (Ionic 7+) or manual `<ion-note>` for older versions.
- **Label placement** — `labelPlacement` attribute (`floating`, `stacked`, `fixed`).
### Step 7: Manage Services and State
Read `references/services-and-state.md` for service and state management patterns.
Topics covered:
- **Injectable services** — `@Injectable({ providedIn: 'root' })`.
- **HTTP data fetching** — `HttpClient` setup for standalone and NgModule, CRUD service pattern.
- **Reactive state** — `BehaviorSubject` for shared observable state.
- **Angular signals** — `signal()` and `computed()` for reactive state (Angular 16+).
- **Loading indicators** — `LoadingController` for async operations.
- **Error feedback** — `ToastController` for user-facing error/success messages.
- **Environment config** — `environment.ts` / `environment.prod.ts` for API URLs.
### Step 8: Optimize Performance
Read `references/performance.md` for performance optimization techniques.
Topics covered:
- **Lazy loading** — `loadComponent` (standalone) and `loadChildren` (NgModule).
- **trackBy / track** — efficient list rendering with `*ngFor` and `@for`.
- **Virtual scrolling** — Angular CDK `cdk-virtual-scroll-viewport` for large lists.
- **OnPush change detection** — reduce unnecessary re-renders.
- **Preloading strategy** — `PreloadAllModules` for instant subsequent navigation.
- **Skeleton text** — `ion-skeleton-text` for perceived performance during loading.
### Step 9: Write Tests
Read `references/testing.md` for testing patterns.
Topics covered:
- **Unit testing pages** — `TestBed` setup for standalone and NgModule pages.
- **Testing services** — basic services and HTTP services with `HttpTestingController`.
- **Mocking dependencies** — `jasmine.createSpyObj` for service and controller mocks.
- **Testing navigation** — mocking `NavController`.
- **Testing guards** — `TestBed.runInInjectionContext` for functional guards.
- **E2E testing** — Cypress and Playwright setup.
## Error Handling
- **`NullInjectorError: No provider for IonRouterOutlet`**: In standalone apps, verify `provideIonicAngular({})` is called in `app.config.ts`. In NgModule apps, verify `IonicModule.forRoot()` is imported in `app.module.ts`.
- **Ionic components not rendering**: In standalone components, verify each Ionic component is imported from `@ionic/angular/standalone` and listed in the `imports` array. In NgModule components, verify `IonicModule` is imported in the page module.
- **Icons not showing (standalone)**: Verify `addIcons()` is called with the required icons from `ionicons/icons`, and `IonIcon` is imported from `@ionic/angular/standalone`.
- **`ionViewWillEnter` not firing**: Verify the component is directly routed via `<ion-router-outlet>`. Child components do not receive Ionic lifecycle events.
- **Page data not refreshing on back navigation**: Use `ionViewWillEnter` instead of `ngOnInit` for data loading. Ionic caches pages in the DOM, so `ngOnInit` only fires once.
- **Form validation errors not displaying**: For Ionic 7+, use `errorText` on `<ion-input>`. For older versions, manually check `control.invalid && control.touched` and show `<ion-note>`.
- **`routerLink` not working on Ionic components**: In standalone components, import `RouterLink` from `@angular/router` in the component's `imports` array.
- **Page transitions not animating**: Use `NavController` from `@ionic/angular` instead of Angular's `Router` for animated navigation. Alternatively, add `routerDirection` to `routerLink` elements.
- **Tab navigation broken**: Verify the `tab` attribute on `<ion-tab-button>` matches the child route `path`. Do not programmatically navigate between tabs.
## Related Skills
- **`capacitor-angular`** — Capacitor-specific Angular patterns (plugin services, NgZone, deep links, platform detection).
- **`ionic-app-development`** — General Ionic development (components, theming, CLI).
- **`ionic-app-creation`** — Create a new Ionic app from scratch.
- **`ionic-app-upgrades`** — Upgrade Ionic to a newer version.
© capawesome-team · MIT · capawesome-team/skills