ionic是一款混合移动应用开发框架,可以用来构建跨平台(Android & iOS)的移动应用程序,而且还可以基于Sass和AngularJS进行构建,是目前跨平台移动应用开发的一个翘楚。这个框架的目的是从web的角度开发手机应用,基于PhoneGap的编译平台,可以实现编译成各个平台的应用程序。
Vue.js是一个MVVM驱动的 web 界面的渐进式框架,学习简单并且十分灵活。ionic3之前一般默认和Angular“绑定”在了一起,从ionic4开始,Ionic Team宣布将会逐渐采用Stencil来实现标准Web Components,使用ionic将不再必须使用Angular,可以使用React,Vue,Jquery或者什么框架都不使用。
准备环境
Vue提供了CLI工具来方便的创建Vue应用,首先我们需要
- 安装Vue CLI:
1 | npm install -g vue-cli |
- 创建vue项目
1 | vue init webpack ionic-vue |
随后一路enter
- 打开项目
1 | cd ionic-vue |
引入Ionic
- 在 index.html 引入 Ionic
1 | <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> |
- 在 src/main.js 中添加ignoredElements
1 | Vue.config.ignoredElements = [ |
开发应用
- 创建两个新页面
我们希望演示如何在两个页面之间跳转
例如 src/pages/HelloWorld.vue1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28<template>
<ion-app>
<ion-header>
<ion-navbar>
<ion-title>Ionic</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<ion-button @click="goToDetail">Hello</ion-button>
</ion-content>
</ion-app>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
},
methods: {
goToDetail () {
this.$router.push('detail')
}
}
}
</script>
src/pages/Detail.vue1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<template>
<ion-app>
<ion-header>
<ion-navbar>
<ion-title>Ionic</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p><router-link to="/">Go home</router-link></p>
</ion-content>
</ion-app>
</template>
<script>
export default {
name: 'Detail',
data () {
return {
msg: 'Welcome to Your Ionic App'
}
}
}
</script>
- 添加路由
router/index.js1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/pages/HelloWorld'
import Detail from '@/pages/Detail'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
component: HelloWorld
},
{
path: '/detail',
component: Detail
}
]
})
- 添加全局过渡动画效果
src/App.vue1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36<template>
<div id="app">
<transition name="slide-fade">
<router-view/>
</transition>
</div>
</template>
<script>
export default {
name: 'app'
}
</script>
<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;
}
.slide-fade-enter-active {
transition: all .3s ease;
}
.slide-fade-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
</style>
打包成应用
- 添加cordova 到项目
1 | npm install -g cordova |
- 创建cordova项目
1 | cordova create my-project-name |
- 创建/移动vue项目
1 | vue init webpack my-app |
将my-app里的内容剪切到my-project-name下,同名覆盖
- 修改打包路径
修改config/index.js文件下的build属性,将dist改为www,绝对路径改为相对路径
1 | build: { |
5.vue项目中添加cordova.js
在index.html body中添加cordova.js1
<script type="text/javascript" src="cordova.js"></script>
同时在 head 中添加 移动端meta信息
1 | <!--meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;"--> |
- 运行项目
1 | npm install |
- 编译成 iOS & Android 项目
安装 cordova iOS & Android 平台
1 | cordova platform add ios android --save |
编译
1 | npm run build |
运行
1 | cordova run ios --device |