跳到主要内容
版本:v8

你的第一个 Ionic 应用:Vue

Ionic 的伟大之处在于,只需一套代码库,你就可以使用 HTML、CSS 和 JavaScript 为任何平台构建应用。跟随我们一起通过逐步创建真实的应用程序来学习 Ionic 应用开发的基础知识。

以下是完成后的应用在三个平台上运行的效果:

我们将构建什么

我们将创建一个相册应用,能够使用设备相机拍摄照片,以网格形式显示,并永久存储在设备上。

亮点包括:

  • 一个基于 Vue 的代码库,使用 Ionic Framework UI 组件在 Web、iOS 和 Android 上运行。
  • 使用 Ionic 官方的原生应用运行时 Capacitor 部署为原生 iOS 和 Android 移动应用。
  • 由 Capacitor CameraFilesystemPreferences API 驱动的相册功能。

在 GitHub 上找到本指南中引用的完整应用代码

下载所需工具

立即下载并安装这些工具,以确保最佳的 Ionic 开发体验:

  • Node.js 用于与 Ionic 生态系统交互。在此下载 LTS 版本
  • 代码编辑器用于...编写代码!我们是 Visual Studio Code 的粉丝。
  • 命令行界面/终端 (CLI)
    • Windows 用户:为获得最佳 Ionic 体验,我们建议使用内置的命令行 (cmd) 或 Powershell CLI,以管理员模式运行。
    • Mac/Linux 用户:几乎任何终端都可以工作。

安装 Ionic 工具

在命令行终端中运行以下命令安装 Ionic CLI (ionic)、native-run(用于在设备和模拟器上运行原生二进制文件)以及 cordova-res(用于生成原生应用图标和启动画面):

备注

要在 Visual Studio Code 中打开终端,请转到 Terminal -> New Terminal。

npm install -g @ionic/cli native-run cordova-res
备注

-g 选项表示全局安装。当全局安装包时,可能会发生 EACCES 权限错误。

考虑设置 npm 以无提升权限的方式全局运行。更多信息请参见解决权限错误

创建应用

接下来,创建一个使用"Tabs"启动模板并添加 Capacitor 以实现原生功能的 Ionic Vue 应用:

ionic start photo-gallery tabs --type vue

这个启动项目包含了三个预构建页面和 Ionic 开发的最佳实践。有了现成的通用构建块,我们可以轻松添加更多功能!

接下来,进入应用文件夹:

cd photo-gallery

接下来我们需要安装必要的 Capacitor 插件以使应用的原生功能工作:

npm install @capacitor/camera @capacitor/preferences @capacitor/filesystem

PWA Elements

某些 Capacitor 插件,包括 Camera API,通过 Ionic PWA Elements 库提供基于 Web 的功能和 UI。

这是一个独立的依赖项,接下来安装它:

npm install @ionic/pwa-elements

接下来,通过编辑 src/main.ts 导入 @ionic/pwa-elements

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';

import { IonicVue } from '@ionic/vue';
// CHANGE: Add the following import
import { defineCustomElements } from '@ionic/pwa-elements/loader';

/* ...existing Ionic styles... */

/* Theme variables */
import './theme/variables.css';

// CHANGE: Call the element loader before the createApp() call
defineCustomElements(window);

const app = createApp(App).use(IonicVue).use(router);

router.isReady().then(() => {
app.mount('#app');
});

就是这样!现在是时候看看应用的效果了。

运行应用

接下来运行此命令:

ionic serve

瞧!你的 Ionic 应用现在在 Web 浏览器中运行。你可以在浏览器中构建和测试大部分应用,大大提高了开发和测试速度。

相册

这里有三个标签。点击"Tab2"标签。它是一个空白的面板,是将它变成相册的完美位置。Ionic CLI 具有 Live Reload 功能,因此当你进行更改并保存时,应用会立即更新!

显示 Ionic 应用中 Live Reload 功能的动画 GIF,代码更改立即反映在 Web 浏览器中。

打开 /src/views/Tab2Page.vue。我们看到:

<template>
<ion-page>
<ion-header>
<ion-toolbar>
<ion-title>Tab 2</ion-title>
</ion-toolbar>
</ion-header>
<ion-content :fullscreen="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title size="large">Tab 2</ion-title>
</ion-toolbar>
</ion-header>

<ExploreContainer name="Tab 2 page" />
</ion-content>
</ion-page>
</template>

<script setup lang="ts">
import { IonPage, IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
import ExploreContainer from '@/components/ExploreContainer.vue';
</script>

ion-header 表示顶部导航和工具栏,标题为"Tab 2"(由于 iOS 可折叠大标题 支持,有两个标题)。将两个 ion-title 元素重命名为:

<template>
<ion-page>
<ion-header>
<ion-toolbar>
<!-- CHANGE: Update title -->
<ion-title>Photo Gallery</ion-title>
</ion-toolbar>
</ion-header>
<ion-content :fullscreen="true">
<ion-header collapse="condense">
<ion-toolbar>
<!-- CHANGE: Update title -->
<ion-title size="large">Photo Gallery</ion-title>
</ion-toolbar>
</ion-header>

<!-- ...existing code... -->
</ion-content>
</ion-page>
</template>

我们将应用的视觉部分放在 <ion-content> 中。在这种情况下,我们将在此处添加一个按钮,用于打开设备相机并显示相机拍摄的图像。首先在页面底部添加一个浮动操作按钮 (FAB),并将相机图像设置为图标。

<template>
<ion-page>
<ion-header>
<ion-toolbar>
<ion-title>Photo Gallery</ion-title>
</ion-toolbar>
</ion-header>
<ion-content :fullscreen="true">
<ion-header collapse="condense">
<ion-toolbar>
<ion-title size="large">Photo Gallery</ion-title>
</ion-toolbar>
</ion-header>

<!-- CHANGE: Add the floating action button -->
<ion-fab vertical="bottom" horizontal="center" slot="fixed">
<ion-fab-button>
<ion-icon :icon="camera"></ion-icon>
</ion-fab-button>
</ion-fab>

<!-- CHANGE: Remove or comment out <ExploreContainer /> -->
<!-- <ExploreContainer name="Tab 2 page" /> -->
</ion-content>
</ion-page>
</template>

<script setup lang="ts">
// CHANGE: Add import from `ionicons/icons`
import { camera } from 'ionicons/icons';
// CHANGE: Update import from `@ionic/vue` to include necessary Ionic components
import { IonPage, IonHeader, IonFab, IonFabButton, IonIcon, IonToolbar, IonTitle, IonContent } from '@ionic/vue';
// CHANGE: Remove or comment out the ExploreContainer import
// import ExploreContainer from '@/components/ExploreContainer.vue';
</script>

接下来,打开 src/views/TabsPage.vue。将中间标签按钮的标签改为"Photos",并将 ellipse 图标改为 images

<template>
<ion-page>
<ion-tabs>
<ion-router-outlet></ion-router-outlet>
<ion-tab-bar slot="bottom">
<ion-tab-button tab="tab1" href="/tabs/tab1">
<ion-icon aria-hidden="true" :icon="triangle" />
<ion-label>Tab 1</ion-label>
</ion-tab-button>

<ion-tab-button tab="tab2" href="/tabs/tab2">
<!-- CHANGE: Update icon -->
<ion-icon aria-hidden="true" :icon="images" />
<!-- CHANGE: Update label -->
<ion-label>Photos</ion-label>
</ion-tab-button>

<ion-tab-button tab="tab3" href="/tabs/tab3">
<ion-icon aria-hidden="true" :icon="square" />
<ion-label>Tab 3</ion-label>
</ion-tab-button>
</ion-tab-bar>
</ion-tabs>
</ion-page>
</template>

<script setup lang="ts">
import { IonTabBar, IonTabButton, IonTabs, IonLabel, IonIcon, IonPage, IonRouterOutlet } from '@ionic/vue';
// CHANGE: Update import by removing `ellipse` and adding `images`
import { images, square, triangle } from 'ionicons/icons';
</script>

这只是我们使用 Ionic 可以做的一系列酷炫事情的开端。接下来,在 Web 上实现相机拍照功能,然后为 iOS 和 Android 构建。