跳至主要内容
版本: v8

使用实时重新加载快速进行应用开发

到目前为止,我们已经看到了开发一个跨平台应用是多么容易,该应用可以在任何地方使用。开发体验非常快,但是如果我告诉你还有更快的方法呢?

我们可以使用 Ionic CLI 的 实时重新加载功能 来提高构建 Ionic 应用的效率。启用后,实时重新加载会在检测到应用更改时重新加载浏览器和/或 WebView。

实时重新加载

还记得 ionic serve 吗?那是实时重新加载在浏览器中运行,允许我们快速迭代。

我们也可以在 iOS 和 Android 设备上开发时使用它。这在编写与原生插件交互的代码时特别有用。因为我们需要在设备上运行原生插件代码才能验证其是否有效,所以能够快速编写代码、构建和部署代码,然后进行测试对于保持开发速度至关重要。

让我们使用实时重新加载来实现照片删除功能,这是我们照片库功能中缺失的一部分。选择你选择的平台(iOS 或 Android)并将设备连接到你的计算机。接下来,根据你选择的平台在终端中运行以下命令之一

$ ionic cap run ios -l --external

$ ionic cap run android -l --external

实时重新加载服务器将启动,如果未打开,则会打开你选择的原生 IDE。在 IDE 中,单击播放按钮将应用启动到你的设备上。

删除照片

在实时重新加载运行且应用在你的设备上打开的情况下,让我们实现照片删除功能。打开 Tab2Page.vue,然后导入 actionSheetController。我们将显示一个具有删除照片选项的 IonActionSheet

import {
actionSheetController,
IonPage,
IonHeader,
IonFab,
IonFabButton,
IonIcon,
IonToolbar,
IonTitle,
IonContent,
IonImg,
IonGrid,
IonRow,
IonCol,
} from '@ionic/vue';
// other imports

接下来,引用 deletePhoto 函数,我们将在稍后创建它

const { photos, takePhoto, deletePhoto } = usePhotoGallery();

当用户点击图片时,我们将显示操作表。向 <ion-img> 元素添加一个点击处理程序

<ion-img :src="photo.webviewPath" @click="showActionSheet(photo)"></ion-img>

接下来,在 script setup 中,调用 create 函数以打开一个对话框,其中包含删除所选照片或取消(关闭)对话框的选项

const showActionSheet = async (photo: UserPhoto) => {
const actionSheet = await actionSheetController.create({
header: 'Photos',
buttons: [
{
text: 'Delete',
role: 'destructive',
icon: trash,
handler: () => {
deletePhoto(photo);
},
},
{
text: 'Cancel',
icon: close,
role: 'cancel',
handler: () => {
// Nothing to do, action sheet is automatically closed
},
},
],
});
await actionSheet.present();
};

接下来,我们需要在 usePhotoGallery 函数中实现 deletePhoto 方法。打开文件,然后添加

const deletePhoto = async (photo: UserPhoto) => {
// Remove this photo from the Photos reference data array
photos.value = photos.value.filter((p) => p.filepath !== photo.filepath);

// delete photo file from filesystem
const filename = photo.filepath.substr(photo.filepath.lastIndexOf('/') + 1);
await Filesystem.deleteFile({
path: filename,
directory: Directory.Data,
});
};

首先,从 photos 数组中删除所选照片,然后使用 Filesystem API 删除照片文件。

请记住,从 photos 数组中删除照片会自动触发 cachePhotos 函数

const cachePhotos = () => {
Preferences.set({
key: PHOTO_STORAGE,
value: JSON.stringify(photos.value),
});
};

watch(photos, cachePhotos);

最后,返回 deletePhoto 函数

return {
photos,
takePhoto,
deletePhoto,
};

保存此文件,然后再次点击照片并选择“删除”选项。这次,照片被删除了!使用实时重新加载实现得更快。💪

在本教程的最后一部分,我们将引导你了解 Appflow 产品的基本知识,该产品用于构建和部署你的应用到用户的设备。