Skip to main content
skill CX Codex

ionic-angular — Claude Code skill for Angular patterns in Ionic

A skill that walks your coding agent through Angular patterns in Ionic: routing, lazy loading, forms, page lifecycle hooks.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add capawesome-team/skills --skill ionic-angular -a claude-code
Open on GitHub

What ionic-angular does

The skill gets your agent oriented in an Ionic project built with Angular. It reads package.json, src/main.ts and src/app/ on its own: Ionic and Angular versions, bootstrapApplication versus platformBrowserDynamic().bootstrapModule, whether Capacitor is present, and whether navigation runs on tabs or a side menu. It will not ask you for facts it can infer.

From there it covers one topic at a time. Project layout, the differences between standalone and NgModule, Angular Router wired to ion-tabs, ion-menu and modals, lazy loading with loadComponent or loadChildren, the ionViewWillEnter and ionViewDidEnter hooks, reactive forms with ion-input and ion-select, services and state via BehaviorSubject or signals, guards with CanActivateFn. Imports follow the detected architecture: @ionic/angular/standalone for standalone, IonicModule in the page module otherwise.

You need Node.js, npm and the Ionic CLI, plus a project on Ionic Framework 7 or 8 with @ionic/angular and Angular 16+. The skill does not scaffold a new Ionic app, upgrade Ionic versions or handle Capacitor plugin integration. React and Vue projects are out of scope.

What it helps with

  • tell whether the project is standalone or NgModule before touching imports
  • wire Angular Router into Ionic tabs, side menu and modals
  • set up lazy loading with loadComponent or loadChildren
  • pick the right page lifecycle hook for refreshing data
  • connect reactive forms to ion-input and ion-select with validation messages

Example prompts for the agent

  • check my Ionic project and tell me if it is standalone or NgModule
  • set up lazy loading for the profile page
  • data is stale when I come back to a page — sort out the lifecycle hooks

How to install ionic-angular

1Skills CLI (Vercel)

npx skills add capawesome-team/skills --skill ionic-angular -a claude-code

2Manually: put the files in place

~/.claude/skills/ionic-angular/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/ionic-angular/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about ionic-angular

How do I install ionic-angular in Claude?

Run npx skills add capawesome-team/skills --skill ionic-angular -a claude-code. The skill file then lands at ~/.claude/skills/ionic-angular/SKILL.md.

What does ionic-angular do?

It guides the agent through Angular-specific Ionic patterns: project structure, navigation, lazy loading, page lifecycle hooks, forms, services and guards. It detects the project architecture first, then adapts its examples.

What is out of scope for this skill?

It does not create a new Ionic app from scratch, upgrade Ionic versions or cover Capacitor plugin integration. React and Vue are not supported either.

Source text

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

Similar skills

Everything for Mobile →

From the same set20

capacitor-plugins A skill that walks the agent through installing and configuring Capacitor plugins from six sources, official and Capawesome among them. CX Codex +1 1,800installs ionic-expert A skill that hands your agent a working reference for Ionic Framework: components, CLI, theming, navigation and Angular, React, Vue patterns. CX Codex +1 1,200installs capacitor-expert A Capacitor reference skill for AI agents: architecture, CLI, plugins, framework integration and Capawesome Cloud. Useful when the agent builds or debugs a cross-platform app. CX Codex +1 1,100installs capacitor-push-notifications Walks the agent through Firebase, the @capacitor-firebase/messaging plugin, Android, iOS and Web setup, APNs, FCM tokens and a test send. CX Codex +1 979installs capacitor-app-upgrades Walks the agent through upgrading a Capacitor app to a newer major version, including jumps across several versions. Useful when you finally move from 4 to 8. CX Codex +1 902installs capawesome-cloud The skill walks the agent through Capawesome Cloud setup: cloud builds for iOS and Android, OTA updates, and automated publishing to the App Store and Google Play. CX Codex +1 840installs capacitor-app-creation A skill that walks the agent through building a Capacitor app from scratch: web scaffold, config, native platforms, and running it. CX Codex +1 820installs capacitor-plugin-upgrades Walks an agent through major-version upgrades of a Capacitor plugin, from 4 through 8, including jumps across several versions at once. CX Codex +1 811installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor