Saat ini, Anda mungkin berada di salah satu situasi. Entah Anda membutuhkan cara yang bersih untuk menampilkan beberapa aksi kontekstual tanpa memenuhi layar dengan tombol tambahan, atau Anda sudah mengirimkan sebuah sheet aksi ionic dan menemukan bahwa versi demo yang mudah tidak sama dengan implementasi yang siap produksi.
Perbedaan ini penting. Sebuah sheet aksi terlihat sederhana, tapi berada di persimpangan antara desain interaksi, API framework, perilaku platform, aksesibilitas, dan perawatan setelah rilis. Jika Anda hanya menganggapnya sebagai popup dengan tombol, Anda akan melewatkan bagian yang biasanya rusak pada tahap QA.
Daftar Isi
- Pengenalan Ionic Action Sheet
- Mengerti Kontroler Action Sheet dan API
- Contoh Implementasi untuk Angular React dan Vue
- Pengaturan dan Pengaturan Tampilan dengan CSS
- Topik Lanjutan dan Pertimbangan Platform
- Pitfall Perbaikan dan Pengiriman UI Hidup
Pendahuluan ke Aksi Sheet Ioni
Aksi Sheet Ioni adalah alat yang tepat ketika pengguna membutuhkan memilih kecil, fokus yang terkait dengan konteks saat ini. Hapus draft. Ganti foto profil. Simpan, bagikan, atau arsipkan dokumen. Tindakan ini penting, tetapi tidak layak untuk ruang permanen di layout utama.
In Ionic, pola telah konsisten selama waktu lama. Aplikasi Ionic sebelumnya menggunakan $ionicActionSheet service, yang TutorialsPoint deskripsikan sebagai panel yang muncul dari bawah layar dan ditampilkan dengan menginjeksi service dan memanggil show() di controller. Aplikasi modern menggunakan ion-action-sheet, tetapi model interaksi masih dapat dikenali sebagai yang sama, yang membuat komponen salah satu contoh yang lebih jelas dari Ionic mempertahankan pola UI mobile melintasi generasi framework di dokumentasi ringkasan action sheet Ionic 1 dari TutorialsPoint.
Kontinuitas itu berguna dalam proyek nyata. Ini berarti komponen bukanlah abstraksi tren yang berubah setiap rilis. Ini adalah pola mobile pertama yang stabil yang maps baik ke menu pilihan iOS dan Android, dan masih terasa alami di proyek Angular, React, dan Vue.
Mengapa tim terus mencari komponen ini
Sheet aksi berfungsi baik ketika pengguna sudah memahami konteks dan hanya membutuhkan daftar singkat langkah selanjutnya. Ini berfungsi buruk ketika pengguna membutuhkan penjelasan, validasi, atau beberapa bidang formulir.
Aturan sederhana membantu:
- Gunakan sheet aksi untuk menu keputusan singkat yang terkait dengan item tertentu.
- Gunakan peringatan When Anda memerlukan konfirmasi dengan pilihan yang minimal.
- Pilih Modul When pengguna memerlukan lebih banyak konten, input, atau penggeseran.
Aturan Praktis: Jika label tombol tidak dapat berdiri sendiri tanpa teks paragraf tambahan, jangan memaksa interaksi ke dalam sheet aksi.
Dalam aplikasi hybrid, pola ini juga cocok dengan model web ke native. Antarmuka sederhana cukup untuk menampilkan layer web, sementara masih terasa native pada perangkat sentuh. Jika tim Anda membangun pada Capacitor dan ingin memiliki model mental yang lebih jelas tentang batasan itu, pemahaman tentang bagaimana Capacitor menghubungkan web dan native __CAPGO_KEEP_1__ how Capacitor bridges web and native code Pengertian Kontroler Sheet Aksi dan __CAPGO_KEEP_0__
Understanding the Action Sheet Controller and API
Diagram alir yang menjelaskan arsitektur, konfigurasi, dan __CAPGO_KEEP_0__ komponen Kontroler Sheet Aksi.

Mengapa API dikendalikan
In pekerjaan sehari-hari Ionic, pendekatan berbasis controller biasanya adalah pilihan yang paling bersih karena sheet aksi adalah sementara. Anda tidak ingin potongan besar markup template yang berada di halaman Anda untuk menu yang hanya muncul setelah sentuhan pada ikon overflow.
Official Ionic docs mendefinisikan Action Sheet sebagai dialog modal yang memerlukan pengakhiran pengguna, dan mereka menempatkan banyak tekanan pada metode siklus pengakhiran seperti onDidDismiss untuk logika seleksi pasca- di dokumen Action Sheet Ionic API. Desain tersebut memberitahu Anda bagaimana mengatur code. Tampilkan terlebih dahulu. Beraksi setelah pengakhiran. Jangan menghubungkan logika kritis ke asumsi tentang waktu.
Opsi yang sebenarnya berpengaruh
Banyak tim hanya membutuhkan subset kecil dari API, tetapi mereka perlu menggunakan subset tersebut dengan benar.
| Pilihan | Apa yang dilakukan | Mengapa itu penting |
|---|---|---|
header |
Mengatur label atas | Baik untuk konteks ketika aksi mungkin ambigu |
subHeader |
Menambahkan teks sekunder | Bermanfaat ketika aksi memerlukan klarifikasi ringan |
buttons |
Mengedefinisikan aksi yang tersedia | Ini adalah tempat di mana perilaku dan penekanan visual hidup |
cssClass |
Menambahkan kelas kustom | Penting untuk gaya yang terbatas daripada trik global |
mode |
Menggunakan gaya iOS atau MD | Bermanfaat untuk tes yang dikendalikan di seluruh platform |
Konfigurasi tombol adalah tempat kesalahan biasanya terjadi. Tombol biasa dapat mencakup:
textuntuk label yang terlihat.iconJika Anda ingin tanda visual.handlerUntuk logika panggilan balik segera.roleUntuk perilaku semantik dan gaya pengaturan platform.
role Tidak dekoratif. Gunakan destructive Untuk aksi berbahaya seperti hapus. Gunakan cancel Untuk jalur keberangkatan. Peran-peran tersebut mempengaruhi bagaimana sheet aksi menampilkan pilihan dan bagaimana pengguna membaca daftar di bawah tekanan.
Aksi berbahaya harus berada di tepi set pilihan, bukan dicampur dengan aksi netral dengan berat visual yang sama.
Penolakan adalah bagian dari kontrak
Masalah umum yang terjadi seperti ini: seorang pengembang membuka sheet aksi, menganggap hasil handler cukup, kemudian mengaktifkan navigasi atau memperbarui state sebelum overlay telah sepenuhnya ditutup. Hal itu dapat menghasilkan transisi yang tidak halus, state yang ketinggalan, atau kondisi balap di tes.
Gunakan siklus secara sengaja:
- Buatlah sheet.
await present().await onDidDismiss().- Baca peran atau data yang dikembalikan.
- Triggerkan aksi berikutnya.
Polanya itu membosankan, dan itu mengapa polanya itu berhasil.
Contoh sederhana Angular-style dari bentuknya adalah:
const sheet = await this.actionSheetController.create({
header: 'Photo options',
buttons: [
{
text: 'Take Photo',
icon: 'camera',
handler: () => {
console.log('take photo');
}
},
{
text: 'Delete Photo',
role: 'destructive',
icon: 'trash'
},
{
text: 'Cancel',
role: 'cancel'
}
]
});
await sheet.present();
const result = await sheet.onDidDismiss();
console.log('dismissed with role:', result.role);
Jika Anda hanya ingat satu hal dari API, ingatlah ini: Sebuah sheet aksi ionic tidak selesai ketika muncul. Ini selesai ketika menutup.
Contoh Implementasi untuk Angular React dan Vue
Struktur sintaks berbeda di setiap framework, tapi model mentalnya tidak. Setiap versi menciptakan interaksi yang sama: pengguna mengetuk avatar, melihat opsi untuk foto profil, memilih aksi, dan aplikasi bereaksi setelah overlay menutup.

Jika Anda juga mengelola keadaan offline untuk unggahan media, panduan ini untuk membuat layar offline di Vue Angular React cocok dengan contoh di bawah karena aksi foto sering mengarah langsung ke aliran yang bergantung pada jaringan.
Contoh Angular
Dalam Ionic Angular, pendekatan yang paling umum adalah menginjeksi ActionSheetController ke dalam komponen atau halaman.
import { Component } from '@angular/core';
import { ActionSheetController } from '@ionic/angular';
@Component({
selector: 'app-profile-photo',
template: `
<ion-button expand="block" (click)="openPhotoActions()">
Profile Photo Options
</ion-button>
`
})
export class ProfilePhotoComponent {
constructor(private actionSheetController: ActionSheetController) {}
async openPhotoActions() {
const actionSheet = await this.actionSheetController.create({
header: 'Profile photo',
subHeader: 'Choose what to do next',
buttons: [
{
text: 'Take Photo',
icon: 'camera',
handler: () => {
console.log('Open camera flow');
}
},
{
text: 'Choose from Library',
icon: 'images',
handler: () => {
console.log('Open photo library flow');
}
},
{
text: 'Remove Current Photo',
role: 'destructive',
icon: 'trash',
handler: () => {
console.log('Remove current photo');
}
},
{
text: 'Cancel',
role: 'cancel'
}
]
});
await actionSheet.present();
const { role } = await actionSheet.onDidDismiss();
console.log('Action sheet dismissed with role:', role);
}
}
Tim Angular biasanya salah di salah satu tempat. Mereka entah memindahkan logika yang terlalu banyak ke handler tombol, atau mereka lupa bahwa janji penolakan adalah tempat yang lebih aman untuk mengkoordinasikan transisi UI.
Contoh React
Dalam Ionic React, useIonActionSheet memberikan Anda fungsi API yang padat dan fungsional yang sesuai dengan alami dengan handler acara.
import React from 'react';
import { IonButton, useIonActionSheet } from '@ionic/react';
const ProfilePhotoActions: React.FC = () => {
const [presentActionSheet] = useIonActionSheet();
const openPhotoActions = () => {
presentActionSheet({
header: 'Profile photo',
subHeader: 'Choose what to do next',
buttons: [
{
text: 'Take Photo',
icon: 'camera',
handler: () => {
console.log('Open camera flow');
}
},
{
text: 'Choose from Library',
icon: 'images',
handler: () => {
console.log('Open photo library flow');
}
},
{
text: 'Remove Current Photo',
role: 'destructive',
icon: 'trash',
handler: () => {
console.log('Remove current photo');
}
},
{
text: 'Cancel',
role: 'cancel'
}
],
onDidDismiss: (event) => {
console.log('Dismissed with role:', event.detail.role);
}
});
};
return (
<IonButton expand="block" onClick={openPhotoActions}>
Profile Photo Options
</IonButton>
);
};
export default ProfilePhotoActions;
Hook API React yang ergonomis, tetapi aturan yang sama berlaku. Tetapkan handler langsung fokus pada aksi yang dipilih. Gunakan panggilan balik penolakan untuk membersihkan, analisis, atau keadaan UI lanjutan.
Contoh Vue
Dalam Ionic Vue, actionSheetController berfungsi dengan baik di dalam API Komposisi.
<template>
<ion-button expand="block" @click="openPhotoActions">
Profile Photo Options
</ion-button>
</template>
<script setup lang="ts">
import { IonButton, actionSheetController } from '@ionic/vue';
const openPhotoActions = async () => {
const actionSheet = await actionSheetController.create({
header: 'Profile photo',
subHeader: 'Choose what to do next',
buttons: [
{
text: 'Take Photo',
icon: 'camera',
handler: () => {
console.log('Open camera flow');
}
},
{
text: 'Choose from Library',
icon: 'images',
handler: () => {
console.log('Open photo library flow');
}
},
{
text: 'Remove Current Photo',
role: 'destructive',
icon: 'trash',
handler: () => {
console.log('Remove current photo');
}
},
{
text: 'Cancel',
role: 'cancel'
}
]
});
await actionSheet.present();
const result = await actionSheet.onDidDismiss();
console.log('Dismissed with role:', result.role);
};
</script>
Perbedaan praktis dalam proyek Vue adalah di mana Anda menyimpan efek sampingan. Jika aplikasi Anda menggunakan komponibel untuk logika kamera atau pilih file, panggil dari handler dan biarkan pengontrol code tipis.
Tetapkan code khusus framework Anda kecil. Logika bisnis untuk kamera, unggah, hapus, dan analisis harus hidup di luar pengaturan sheet aksi.
Penyesuaian dan Pengaturan Tampilan dengan CSS
Stilisasi boks aksi ionic default biasanya cukup baik untuk prototipe. Tidak selalu cukup baik untuk aplikasi yang terbrand, dan pasti tidak cukup ketika desain ingin ruang yang lebih rapat, tipografi yang berbeda, atau aksi penghancuran yang lebih jelas.

Jika tim Anda mencoba membuat aplikasi seluruhnya terasa kurang seperti pembungkus web umum dan lebih seperti produk asli, artikel ini tentang konfigurasi dasar JS dan CSS untuk tampilan aplikasi asli adalah mitra yang berguna untuk pengaturan stilisasi boks aksi.
Bermula dengan cssClass sebelum penggantian global
Aturan pengaturan stilisasi pertama sederhana. Jangan target setiap boks aksi di aplikasi kecuali Anda berarti untuk melakukannya. Gunakan cssClass untuk membatasi varian tertentu.
const sheet = await actionSheetController.create({
header: 'File actions',
cssClass: 'file-actions-sheet',
buttons: [
{ text: 'Rename' },
{ text: 'Delete', role: 'destructive' },
{ text: 'Cancel', role: 'cancel' }
]
});
Lalu gayakan hanya instance tersebut:
.file-actions-sheet {
--background: #101418;
--color: #f5f7fa;
--backdrop-opacity: 0.4;
}
Metode ini lebih baik dalam skala daripada mengejar selektor kemudian.
Pakai properti kustom untuk tema yang luas
Properti CSS kustom adalah cara tercepat untuk mengubah kesan keseluruhan tanpa bertempur dengan struktur komponen.
Kasus penggunaan umum termasuk:
- Warna latar belakang dan teks ketika aplikasi Anda memiliki palet kustom gelap.
- Ketajaman latar belakang ketika penurunan default terasa terlalu lemah atau terlalu berat.
- Jarak dan ukuran ketika kepadatan visual harus sesuai dengan antarmuka lainnya.
.file-actions-sheet {
--background: #1b1f24;
--color: #ffffff;
--backdrop-opacity: 0.32;
--button-color: #dce3ea;
--button-background-hover: #2a3138;
}
Gunakan bagian bayangan ketika Anda membutuhkan ketepatan
Saat desain meminta perubahan yang sasaran, properti kustom mungkin tidak cukup. Itu di mana Bagian Bayangan berperan. Mereka memungkinkan Anda mengatur area internal sheet aksi lebih langsung.
.file-actions-sheet::part(container) {
border-radius: 18px 18px 0 0;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.24);
}
.file-actions-sheet::part(button) {
font-weight: 600;
letter-spacing: 0.01em;
}
.file-actions-sheet::part(backdrop) {
backdrop-filter: blur(4px);
}
Apa yang biasanya tidak berfungsi dengan baik adalah menghias komponen hingga terlalu berlebihan dan tidak lagi merasa seperti menu pilihan sistem. Jika Anda membutuhkan kartu yang kaya, thumbnail, deskripsi panjang, atau tata letak baris kompleks, Anda telah melebihi pola sheet aksi.
Pass personalisasi yang baik harus membuat komponen sesuai dengan aplikasi, bukan menyembunyikan apa yang dia adalah.
Topik-Topik Lanjutan dan Pertimbangan Platform
Aksi sheet produksi hidup di ruang keputusan yang lebih besar daripada kebanyakan tutorial yang mengakui. Anda tidak hanya memilih label tombol. Anda memutuskan apakah overlay harus dirender oleh layer web Ionic atau didelegasikan ke antarmuka native, seberapa kuat Anda ingin perilaku spesifik platform, dan bagaimana memastikan sheet tetap dapat dipahami oleh semua pengguna.

Komponen web atau plugin native
Jika Anda membangun aplikasi Ionic standar, ion-action-sheet biasanya merupakan pilihan default. Ini fleksibel, mudah diatur gaya, dan bekerja konsisten dengan sistem overlay aplikasi Anda lainnya.
Jika aplikasi Anda berbasis Capacitor dan Anda ingin sistem operasi host mengrender sheet, rute native adalah @capacitor/action-sheet. Dokumen Ionic yang mengelilingi plugin tersebut showActions(options) -> Promise<ShowActionsResult>, diinstal dengan npm install @capacitor/action-sheet , dan disinkronkan dengan npx cap sync, sementara juga menyoroti bahwa Elemen PWA diperlukan dalam konteks web dan PWA dalam bahasa Indonesia Capacitor Dokumen plugin Sheet Aksi.
Itu memberikan Anda tabel perdagangan yang lebih praktis:
| Pilihan | Kekuatan | Biaya |
|---|---|---|
ion-action-sheet |
Tema yang lebih mudah dan pola UI web yang dapat dibagikan | Kurang sedikit kesetaraan asli |
@capacitor/action-sheet |
Penggunaan rendering OS host dan perasaan platform yang lebih kuat | Keterbatasan implementasi yang lebih banyak di konteks browser dan PWA |
Gunakan komponen web ketika konsistensi visual dengan aplikasi Anda lebih penting. Gunakan plugin asli ketika kesetaraan platform lebih penting daripada kontrol CSS yang dalam.
Mode platform dan detail aksesibilitas
Ionic dapat menyesuaikan diri dengan mode iOS dan Material Design, dan itu mempengaruhi jarak, gerakan, dan ton visual keseluruhan. Jangan asumsikan gaya Anda berperilaku sama di kedua mode. Uji keduanya secara sengaja, terutama jika tim Anda memaksa mode tunggal di semua platform.
Kemampuan aksesibilitas juga sering diabaikan karena sheet aksi terlihat kecil. Yang masih penting:
- Gunakan teks tombol yang jelas yang membuat arti di luar konteks.
- Simpan
destructiveuntuk aksi berisiko agar antarmuka komunikasi tujuan. - Tetapkan
canceljelas agar pengguna memiliki jalur keluar yang jelas. - Hindari ketidakjelasan dekoratif di mana beberapa aksi terdengar mirip tetapi memiliki hasil yang sangat berbeda.
A pengguna dengan pembaca layar atau keterbatasan beban kognitif tidak mengalami 'overlay sederhana' sebagai sederhana jika labelnya tidak jelas.
Di sini, sudut tajam adalah bahwa pendekatan asli dan web menyelesaikan masalah yang berbeda. Komponen web memberikan Anda lebih banyak kontrol atas penampilan dan integrasi. Plugin asli memberikan alihan platform yang lebih kuat. Tidak ada jawaban yang otomatis lebih baik. Jawaban yang tepat tergantung pada apakah masalah aplikasi saat ini Anda adalah konsistensi visual, kecepatan implementasi, atau perilaku sistem asli.
Pitfalls dan Perbaikan UI Langsung untuk Pengiriman
Banyak bug sheet aksi ionik tidak muncul ketika Anda menghubungkan kabel tiga tombol dan mengetuk melalui mereka di simulator. Mereka muncul kemudian, ketika sheet diatur, diuji pada perangkat baru, dan dikombinasikan dengan navigasi nyata dan transisi keadaan.
Bugs yang muncul setelah demo berjalan
Kelas pertama bug adalah waktu. Logika berjalan terlalu awal karena code tidak menunggu pembatalan. Anda melihat perubahan rute saat overlay masih animasi, atau pembaruan keadaan yang bersaing melawan komponen lain yang menampilkan.
Kelas kedua adalah tata letak. Masalah Ionic yang diketahui melaporkan bahwa sheet aksi dapat menutupi area aman bawah pada beberapa perangkat iOS, terutama ketika --ion-safe-area-bottom tidak nol, dan laporan masalah mencatat bahwa bahkan dapat direproduksi di demo dokumen Ionic sendiri dalam masalah GitHub tentang penutupan area aman bawah.Masalah ini adalah jenis masalah yang tim tidak lewatkan sampai QA akhir karena tergantung pada bentuk perangkat, mode, dan CSS kustom.
Area aman yang praktis
Jika aplikasi Anda menampilkan sheet terlalu dekat dengan area indikator rumah, mulai dengan override yang terbatas daripada patch global yang luas.
.safe-area-sheet::part(container) {
padding-bottom: calc(env(safe-area-inset-bottom) + 8px);
}
Lalu aplikasikan kelas ketika membuat sheet aksi:
const sheet = await actionSheetController.create({
header: 'More actions',
cssClass: 'safe-area-sheet',
buttons: [
{ text: 'Archive' },
{ text: 'Delete', role: 'destructive' },
{ text: 'Cancel', role: 'cancel' }
]
});
Itu tidak akan menggantikan pengujian perangkat yang tepat, tetapi memberikan Anda tempat yang konkrit untuk memulai tanpa mengubah setiap overlay di aplikasi.
Mengapa pembaruan hidup penting untuk defek UI
Kenyataan praktis operasi rilis menjadi jelas. Regresi area aman, aturan padding yang rusak, atau warna tombol destructive yang buruk sering kali hidup di JavaScript atau CSS. Jika bug itu berlayar ke produksi, menunggu rilis toko penuh dapat mengubah defek visual kecil menjadi hari-hari frustrasi pengguna.
Salah satu pilihan praktis adalah layanan pembaruan hidup untuk aplikasi Capacitor. Contohnya Capgo Mengirimkan paket web yang diperbarui sehingga tim dapat mengirimkan perbaikan JavaScript, CSS, copy, konfigurasi, dan aset tanpa menunggu tinjauan toko aplikasi, yang secara langsung relevan ketika bug gaya sheet aksi atau overlay melintas di QA.
Overlay UI adalah fitur yang tepat di mana jaringan keamanan itu membayar. Mereka sangat terlihat, mudah rusak dengan perubahan gaya kecil, dan biasanya dapat diperbaiki tanpa membangun kembali native code.
Jika tim Anda sering mengirimkan aplikasi Ionic atau Capacitor, Capgo perlu dievaluasi sebagai bagian dari alur pelepasan Anda. Ini memberi Anda cara untuk memasukkan perbaikan layer web untuk masalah seperti bug tata letak sheet aksi, regresi gaya, dan kesalahan salinan setelah pelepasan, sementara menjaga kendali atas saluran perluasan dan perilaku pembaruan.
Teruskan dari Ionic Action Sheet: Panduan Lengkap untuk 2026
Jika Anda menggunakan Ionic Action Sheet: Panduan Lengkap untuk 2026 untuk merencanakan migrasi dan operasi bisnis, hubungkannya dengan Capgo Enterprise untuk alur kerja produk di Capgo Enterprise, Ionic Enterprise Plugin Alternatives untuk alur kerja produk di Ionic Enterprise Plugin Alternatives, Capgo Alternatives untuk alur kerja produk di Capgo Alternatives, Capgo Consulting untuk alur produk di Capgo Consulting, dan Capgo Support Premium untuk alur produk di Capgo Support Premium.