Ionic Vue事始め
Ionic Vueを触り始めてみました。
まだ何を作るか考えてませんが、自分用のメモとしてつらつら書いていきます。(頑張って続けます!)
この記事では、インストールとページ作成とモーダル作成をします。
インストール
(yarnを使う場合が多いですが、ここではnpmを使います)
まずは、Vue CLIのインストール
npm install -g @vue/cli
Vue CLIを用いてプロジェクトを作成します。
vue create ionic-vue-app
(Vue CLI UIを用いる方法もありますが、Vue CLI UIはよく知らないのでスルーします)
Ionic VueはVue-Routerを用いるので、Routerを追加します。
vue add router
これだけで、関連するソースコードがRouterを用いたものに変更されます。
あとは、@ionic/vue
をインストールします
npm install @ionic/vue
自分の環境ではserve時にexport ‘ICON_PATHS’ was not found in ‘ionicons/icons’
が出て、うまく動かなかったのでionicons
を追加します。
(バージョンを適宜調べて変えてください)
npm install ionicons@4.5.9-1 --save-dev
以上で、インストールは終了です
Ionic/Vue導入
インストールはしましたが、まだVueのままです。
Ionicを使えるようにするために、src/main.js
へプラグインを追加します。
(Vue.use()はVueのプラグインを使用する方法です。)
import Vue from 'vue' import App from './App.vue' import router from './router' import Ionic from '@ionic/vue' import '@ionic/core/css/ionic.bundle.css' Vue.use(Ionic) Vue.config.productionTip = false new Vue({ router, render: h => h(App) }).$mount('#app')
次に、src/views/Home.vue
もionic-app
を用いたものに変えます。
<template> <div class="ion-page"> <ion-header> <ion-toolbar> <ion-title>Hello World</ion-title> </ion-toolbar> </ion-header> <ion-content class="ion-padding"> <h1>Welcome To @ionic/vue</h1> <img alt="Vue logo" src="../assets/logo.png"> </ion-content> </div> </template> <script> export default { name: "home", }; </script>
これでserveすれば、恐らく動きます。
インストールの最後で書いたioniconsがないwarningが出ている場合、もしかしたらなにも無いページが表示されるかもしれません。(私の環境ではなにも無いページが出てきて時間を浪費しました)
serveすると、デフォルトでhttp://localhost:8080/
が立ち上がり、以下のIonicのようでIonic感がない画面が表示されると思います。
ページ作成
ここまでで、ルートページだけを表示できるようにしました。
次はRouterをいじって、他のページも表示できるようにします。
src/router.js
を書き換えます。
src/main.js
と同様にVue.useを用いて、VueRouter
をIonic向けにカスタムされたIonicVueRouter
へ変更します。
import Vue from 'vue' import Home from './views/Home.vue' import { IonicVueRouter } from '@ionic/vue' Vue.use(IonicVueRouter) export default new IonicVueRouter({ mode: 'history', base: process.env.BASE_URL, routes: [ { path: '/', name: 'home', component: Home }, { path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ './views/About.vue') } ] })
次に、src/App.vue
も書き換えます。
ion-vue-route
は、IonicVueRouter
のコンポーネント?です。
<template> <div id="app"> <ion-app> <ion-vue-router /> </ion-app> </div> </template> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
これで、とりあえず動くようにはなったので、遷移ボタンを追加して遷移させます。
<ion-content class="ion-padding"> <h1>Welcome To @ionic/vue</h1> <img alt="Vue logo" src="../assets/logo.png"> <ion-button @click="aboutPush()" full>Go to About Page</ion-button> </ion-content>
methodsにページ遷移用の関数を定義します。
methods: { aboutPush() { this.$router.push('about') }, }
遷移後のページ(About.vue
)を作成します。
<template> <div class="about"> <ion-header> <ion-toolbar> <ion-buttons slot="start"> <ion-back-button></ion-back-button> </ion-buttons> <ion-title>About Page</ion-title> </ion-toolbar> </ion-header> <ion-content class="ion-padding"> <h1>About Pageです</h1> </ion-content> </div> </template> <script> export default { name: "About", } </script>
これで、ページ遷移もできました。
APIはこちら => ion-nav - Ionic Documentation
モーダル作成
ページ作成ができたので、これがあればアプリっぽく見える(と思っている)モーダル作成をします。
前回と同様に、モーダル作成ボタンを作り、関数を定義します。
($ionic
はionicのアラートやモーダルなどのコントローラーを提供します。)
<template> <div class="ion-page"> <ion-header> <ion-toolbar> <ion-title>Hello World</ion-title> </ion-toolbar> </ion-header> <ion-content class="ion-padding"> <h1>Welcome To @ionic/vue</h1> <img alt="Vue logo" src="../assets/logo.png"> <ion-button @click="aboutPush()" full>Go to About Page</ion-button> <ion-button @click="showModal()" full>Go to Modal</ion-button> </ion-content> </div> </template> <script> import Modal from '../components/Modal'; export default { name: "home", methods: { aboutPush() { this.$router.push('about') }, showModal: async function() { const modal = await this.$ionic.modalController.create({ component: Modal, componentProps: { data: { content: 'New Content', }, propsData: { title: 'New title', msg: Math.round(Math.random() * 100) } } }); await modal.present(); } } }; </script>
モーダル(Modal.vue
)を追加します。
<template> <div> <ion-header> <ion-toolbar> <ion-title>{{ title }} </ion-title> </ion-toolbar> </ion-header> <ion-content padding> {{ content }} {{ msg }}<br> <ion-button @click="dissmissModal()" full>bask to Modal</ion-button> </ion-content> </div> </template> <script> export default { name: 'Modal', props: { title: { type: String, default: 'Super Modal'}, msg: { type: Number, default: 0}, }, data() { return { content: "Content" } }, methods: { dissmissModal() { this.$ionic.modalController.dismiss(); } } } </script>
APIはこちら => ion-modal - Ionic Documentation
Vueユーザーの人も是非
Vueの手軽さはそのままに、モバイルに特化したコンポーネントを簡単に使用することができるので、ぜひVueを使ってる人も使ってみてください!!!
(thx: 添削してくれた友人たち)