跳至主要内容
版本: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 中,单击“播放”按钮将应用程序启动到您的设备上。

删除照片

在实时重载运行且应用程序在您的设备上打开的情况下,让我们实现照片删除功能。打开 tab2.page.html 并为每个 <ion-img> 元素添加一个新的点击处理程序。当应用程序用户点击图库中的照片时,我们将显示一个 操作表 对话框,其中包含删除所选照片或取消(关闭)对话框的选项。

<ion-col size="6" *ngFor="let photo of photoService.photos; index as position">
<ion-img [src]="photo.webviewPath" (click)="showActionSheet(photo, position)"></ion-img>
</ion-col>

tab2.page.ts 中,导入操作表并将其添加到构造函数中

import { ActionSheetController } from '@ionic/angular';

constructor(public photoService: PhotoService,
public actionSheetController: ActionSheetController) {}

UserPhoto 添加到导入语句中。

import { PhotoService, UserPhoto } from '../services/photo.service';

接下来,实现 showActionSheet() 函数。我们添加了两个选项:Delete 调用 PhotoService 的 deletePicture() 函数(将在下一步添加)和 Cancel,它在被赋予“cancel”角色时会自动关闭操作表

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

保存我们刚刚编辑的两个文件。照片库应用程序将自动重新加载,现在当我们点击图库中的照片时,操作表将显示出来。点击“Delete”目前还没有任何作用,所以回到您的代码编辑器中。

src/app/services/photo.service.ts 中,添加 deletePicture() 函数

public async deletePicture(photo: UserPhoto, position: number) {
// Remove this photo from the Photos reference data array
this.photos.splice(position, 1);

// Update photos array cache by overwriting the existing photo array
Preferences.set({
key: this.PHOTO_STORAGE,
value: JSON.stringify(this.photos)
});

// delete photo file from filesystem
const filename = photo.filepath
.substr(photo.filepath.lastIndexOf('/') + 1);

await Filesystem.deleteFile({
path: filename,
directory: Directory.Data
});
}

所选照片将首先从 Photos 数组中删除。然后,我们使用 Capacitor Preferences API 更新 Photos 数组的缓存版本。最后,我们使用 Filesystem API 删除实际的照片文件本身。

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

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