Add Ionic to an Angular workspace
Use Ionic mobile app alongside webapp and share libraries.
Published: 7/7/2024Create a fresh workspace#
ng new my-workspace --no-create-application
cd my-workspace
ng generate application app-my-ionic-1
ng generate application app-my-ionic-2
Ionic#
Install Ionic#
npm install @ionic/angular
npm install @ionic/angular-toolkit --save-dev
Implement Ionic#
Do for both Ionic apps
// app.component.ts
import { Component } from '@angular/core';
import {
IonApp,
IonHeader,
IonToolbar,
IonContent,
IonTitle,
IonIcon,
IonButton,
} from '@ionic/angular/standalone';
import { addIcons } from 'ionicons';
import { bugOutline } from 'ionicons/icons';
@Component({
selector: 'app-root',
standalone: true,
imports: [
IonIcon,
IonButton,
IonContent,
IonTitle,
IonToolbar,
IonApp,
IonHeader,
],
templateUrl: './app.component.html',
styleUrl: './app.component.scss',
})
export class AppComponent {
title = 'app-my-ionic-1';
constructor() {
addIcons({ bugOutline });
}
}
<!-- app.component.html -->
<ion-app>
<ion-header>
<ion-toolbar>
<ion-title> My Ionic App </ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<p>Welcome to Ionic with Angular!</p>
<ion-button shape="round">
<ion-icon slot="icon-only" name="bug-outline"></ion-icon>
</ion-button>
</ion-content>
</ion-app>
// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { RouteReuseStrategy, provideRouter } from '@angular/router';
import {
IonicRouteStrategy,
provideIonicAngular,
} from '@ionic/angular/standalone';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
provideIonicAngular(),
provideRouter(routes),
],
};
// styles.scss
/*
* App Global CSS
* ----------------------------------------------------------------------------
* Put style rules here that you want to apply globally. These styles are for
* the entire app and not just one component. Additionally, this file can be
* used as an entry point to import other CSS/Sass files to be included in the
* output CSS.
* For more information on global stylesheets, visit the documentation:
* https://ionicframework.com/docs/layout/global-stylesheets
*/
/* Core CSS required for Ionic components to work properly */
@import "@ionic/angular/css/core.css";
/* Basic CSS for apps built with Ionic */
@import "@ionic/angular/css/normalize.css";
@import "@ionic/angular/css/structure.css";
@import "@ionic/angular/css/typography.css";
@import "@ionic/angular/css/display.css";
/* Optional CSS utils that can be commented out */
@import "@ionic/angular/css/padding.css";
@import "@ionic/angular/css/float-elements.css";
@import "@ionic/angular/css/text-alignment.css";
@import "@ionic/angular/css/text-transformation.css";
@import "@ionic/angular/css/flex-utils.css";
/**
* Ionic Dark Mode
* -----------------------------------------------------
* For more info, please see:
* https://ionicframework.com/docs/theming/dark-mode
*/
/* @import "@ionic/angular/css/palettes/dark.always.css"; */
/* @import "@ionic/angular/css/palettes/dark.class.css"; */
@import "@ionic/angular/css/palettes/dark.system.css";
Configure Ionic#
Prereqs: Install the Ionic cli globally npm install -g @ionic/cli
From the app root, this will create ionic.config.json
ionic init --multi-app
Add the projects:
// ionic.config.json
{
"projects": {
"app-my-ionic-1": {
"name": "My Ionic App 1",
"integrations": {
"capacitor": {}
},
"type": "angular"
},
"app-my-ionic-2": {
"name": "My Ionic App 2",
"integrations": {
"capacitor": {}
},
"type": "angular"
}
}
}
Capacitor#
IMPORTANT: This setup will not support multiple capacitor projects, despite supporting multiple Ionic projects.
Install#
npm install @capacitor/android @capacitor/app @capacitor/core @capacitor/haptics @capacitor/ios @capacitor/keyboard @capacitor/status-bar
npm install @capacitor/cli --save-dev
Build#
Build Angular#
Each of these commands does the same thing, building to: ./dist/app-my-ionic-1
ng run app-my-ionic-1:buildng build --project="app-my-ionic-1"
Initialise Capacitor#
Create the capacitor.config.ts:
npx cap init- Edit: replace
webDir: 'www'bywebDir: 'dist/app-my-ionic-1/browser', - Set the
appName: 'app-my-ionic-1'
Add iOS#
# add, to ./ios folder
ionic capacitor add ios --project="app-ionic"
# run with simulator, device emulator
ionic capacitor run ios --project="app-ionic"
# open project with xcode
ionic capacitor open ios --project="app-ionic"
Add Android#
# add, to ./android folder
ionic capacitor add android --project="app-ionic"
# run with simulator, device emulator
ionic capacitor run android --project="app-ionic"
# open project with android studio
ionic capacitor open android --project="app-ionic"
Cordova (optional)#
See the github for a full list of available plugins:
npm install @awesome-cordova-plugins/core
npm install @awesome-cordova-plugins/background-mode
npm install @awesome-cordova-plugins/network