Loading...
Loading...
Guides the agent through Ionic Vue development patterns — project structure, Vue-specific Ionic components (IonPage, IonRouterOutlet, IonTabs), navigation with Vue Router and useIonRouter, Ionic lifecycle hooks (onIonViewWillEnter, onIonViewDidEnter, onIonViewWillLeave, onIonViewDidLeave), composable utilities (useIonRouter, useBackButton, useKeyboard), tab-based routing, lazy loading, platform detection with isPlatform, and troubleshooting common Vue-specific issues. Do not use for general Ionic component theming or CLI usage (use ionic-app-development), creating a new Ionic app (use ionic-app-creation), Capacitor-specific Vue patterns without Ionic (use capacitor-vue), upgrading Ionic versions (use ionic-app-upgrades), or non-Vue frameworks like Angular or React.
npx skill4agent add capawesome-team/skills ionic-vue@ionic/vuepackage.json@ionic/vuevue@capacitor/coreandroid/ios/vite.config.ts<script setup><script setup lang="ts">@ionic/vuepackage.jsonvuepackage.json@capacitor/corepackage.jsontsconfig.json.vue<script setup lang="ts">android/ios/src/router/index.tsApp.vueproject-root/
├── android/ # Android native project (generated by Capacitor)
├── ios/ # iOS native project (generated by Capacitor)
├── public/
├── src/
│ ├── components/ # Reusable Vue components
│ ├── composables/ # Custom composables
│ ├── router/
│ │ └── index.ts # Vue Router configuration (uses @ionic/vue-router)
│ ├── theme/
│ │ └── variables.css # Ionic CSS custom properties
│ ├── views/ # Page components (routed views)
│ ├── App.vue # Root component (contains IonApp + IonRouterOutlet)
│ └── main.ts # Entry point (installs IonicVue plugin)
├── capacitor.config.ts # Capacitor configuration
├── package.json
├── tsconfig.json
└── vite.config.tssrc/main.tsimport { createApp } from 'vue';
import { IonicVue } from '@ionic/vue';
import App from './App.vue';
import router from './router';
/* Ionic CSS */
import '@ionic/vue/css/core.css';
import '@ionic/vue/css/normalize.css';
import '@ionic/vue/css/structure.css';
import '@ionic/vue/css/typography.css';
import '@ionic/vue/css/padding.css';
import '@ionic/vue/css/float-elements.css';
import '@ionic/vue/css/text-alignment.css';
import '@ionic/vue/css/text-transformation.css';
import '@ionic/vue/css/flex-utils.css';
import '@ionic/vue/css/display.css';
/* Theme */
import './theme/variables.css';
const app = createApp(App).use(IonicVue).use(router);
router.isReady().then(() => {
app.mount('#app');
});App.vueIonAppIonRouterOutlet<template>
<ion-app>
<ion-router-outlet />
</ion-app>
</template>
<script setup lang="ts">
import { IonApp, IonRouterOutlet } from '@ionic/vue';
</script>references/components.md@ionic/vueimport { IonButton, IonContent, IonPage } from '@ionic/vue'IonPage$elcontentRef.value.$el.scrollToBottom(300)ionicons/iconsv-modelIonInputIonToggleIonSelectIonCheckboxIonRange@ion-change@ion-infinitereferences/navigation.mdcreateRouter@ionic/vue-routervue-routerrouter-linkrouter-directionrouter-animationuseIonRouteruseRoutervue-routercomponent: () => import('@/views/DetailPage.vue')IonTabsIonRouterOutletIonModalreferences/lifecycle.mdIonRouterOutletonMountedonIonViewWillEnteronIonViewDidEnteronIonViewWillLeaveonIonViewDidLeaveIonPagereferences/composables.md@ionic/vue| Function | Purpose |
|---|---|
| Programmatic navigation with transition control |
| Handle Android hardware back button |
| Reactive keyboard visibility and height |
| Lifecycle: page about to show |
| Lifecycle: page fully visible |
| Lifecycle: page about to hide |
| Lifecycle: page fully hidden |
| Check current platform ( |
| Get array of all matching platform identifiers |
isPlatform@ionic/vue<script setup lang="ts">
import { isPlatform } from '@ionic/vue';
const isIOS = isPlatform('ios');
const isAndroid = isPlatform('android');
const isNative = isPlatform('hybrid');
const isMobileWeb = isPlatform('mobileweb');
</script>
<template>
<div>
<p v-if="isNative">Running as a native app</p>
<p v-else>Running in a browser</p>
</div>
</template>androidcapacitorcordovadesktopelectronhybridiosipadiphonemobilemobilewebphabletpwatabletnpm run build
npx cap sync
npx cap run android
npx cap run iosionic serveionic cap run android --livereload --external
ionic cap run ios --livereload --externalFailed to resolve component: ion-*@ionic/vue<script>import { IonButton } from '@ionic/vue'IonPageIonPageIonPageMethod on component is not a function$elref.value.$el.scrollToBottom()ref.value.scrollToBottom()'vue/no-deprecated-slot-attribute': 'off'ion-modal-did-presentaddEventListeneruseIonRouteruseBackButtoninject()setup()<script setup>router.go()useIonRouter().push()router-linkonMountedIonRouterOutletonIonViewWillEnteronMountedIonPageIonPageionic-app-developmentionic-app-creationcapacitor-vueionic-app-upgrades