Kamu mungkin berada di salah satu situasi berikut. Entah kamu membutuhkan cara yang bersih untuk menampilkan beberapa aksi kontekstual tanpa memenuhi layar dengan tombol tambahan, atau kamu sudah mengirimkan sebuah sheet aksi ionic dan menemukan bahwa versi demo yang mudah tidak sama dengan implementasi yang siap digunakan.
Perbedaan itu penting. Sebuah sheet aksi terlihat sederhana, tapi berada di persimpangan antara desain interaksi, API framework, perilaku platform, aksesibilitas, dan perawatan setelah rilis. Jika kamu hanya menganggapnya sebagai popup dengan tombol, kamu akan melewatkan bagian yang biasanya rusak pada tahap QA.
Tabel Konten
- Pendahuluan ke Sheet Aksi Ionic
- Mengerti Kontroler Sheet Aksi dan API
- Contoh Implementasi untuk Angular React dan Vue
- Kustomisasi dan Pengaturan Tampilan dengan CSS
- Topik Lanjutan dan Pertimbangan Platform
- Menghindari Kesulitan dan Mengirimkan Perbaikan UI Langsung
Pendahuluan ke Action Sheet Ionic
Action Sheet Ionic adalah alat yang tepat ketika pengguna membutuhkan membuat pilihan kecil, fokus, dan terkait dengan konteks saat ini. Menghapus draft. Mengganti foto profil. Menyimpan, berbagi, atau mengarsipkan dokumen. Tindakan ini penting, tetapi tidak layak mendapatkan ruang permanen di layout utama.
Dalam Ionic, pola yang telah dipertahankan konsisten selama waktu lama. Aplikasi Ionic awal 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 yang konsisten di ringkasan dokumentasi action sheet Ionic 1 dari TutorialsPoint.
Kontinuitas ini 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 selalu mencapai itu
Sebuah sheet aksi bekerja dengan baik ketika pengguna sudah memahami konteks dan hanya membutuhkan daftar ringkas langkah-langkah berikutnya. Namun, itu bekerja buruk ketika pengguna membutuhkan penjelasan, validasi, atau beberapa bidang formulir.
Aturan sederhana membantu:
- Gunakan sebuah sheet aksi untuk menu keputusan singkat yang terkait dengan item tertentu.
- Gunakan sebuah peringatan ketika Anda membutuhkan konfirmasi dengan pilihan minimal.
- Gunakan sebuah modal ketika pengguna membutuhkan konten lebih, input, atau penggeser.
Aturan praktis: Jika label tombol tidak dapat berdiri sendiri tanpa teks paragraf tambahan, jangan memaksa interaksi ke dalam sebuah sheet aksi.
Dalam aplikasi hybrid, pola ini juga cocok dengan model web-native. Antarmuka pengguna sederhana sehingga dapat dirender di 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, ini adalah pemahaman tentang bagaimana Capacitor menghubungkan web dan native code perlu diingat saat Anda memutuskan di mana sheet aksi harus berada.
Mengerti Kontroler Sheet Aksi dan API
Setelah Anda berhenti berpikir bahwa sheet aksi hanya komponen inline lainnya, maka sheet aksi menjadi lebih mudah dipahami. Ia berperilaku lebih seperti overlay sementara dengan siklus hidup. Anda membuatnya, menampilkan, menunggu pengguna, dan kemudian mengolah hasil setelah pembatalan.

Mengapa API dikendalikan oleh kontroler
Dalam pekerjaan sehari-hari Ionic, pendekatan berbasis kontroler biasanya adalah pilihan yang paling bersih karena sheet aksi adalah sementara. Anda tidak ingin memiliki bagian besar markup template di halaman Anda untuk menu yang hanya muncul setelah sentuhan pada ikon overflow.
Dokumen resmi Ionic mendefinisikan Sheet Aksi sebagai dialog modal yang memerlukan pembatalan pengguna, dan mereka menempatkan banyak tekanan pada metode siklus hidup pembatalan seperti onDidDismiss untuk logika seleksi pasca- Dokumen Sheet Aksi API Ionic. Desain itu menunjukkan cara Anda mengatur code. Tampilkan terlebih dahulu. Reaksi setelah penolakan. Jangan kabel logika kritis ke asumsi tentang waktu.
Pilihan yang sebenarnya berpengaruh
Banyak tim hanya membutuhkan subset kecil dari API, tetapi mereka perlu menggunakan subset tersebut dengan benar.
| Pilihan | Apa yang dilakukannya | Mengapa itu penting |
|---|---|---|
header | Atur label atas | Baik untuk konteks ketika aksi mungkin ambigu |
subHeader | Tambahkan teks sekunder | Bermanfaat ketika aksi membutuhkan klarifikasi ringan |
buttons | Tentukan aksi yang tersedia | Ini adalah tempat di mana perilaku dan penekanan visual hidup |
cssClass | Menambahkan kelas-kelas khusus | Penting untuk gaya yang terbatas untuk menghindari trik global |
mode | Menggunakan gaya iOS atau MD | Bermanfaat untuk pengujian yang dikendalikan di berbagai platform |
Konfigurasi tombol sering kali salah. Tombol biasanya mencakup:
textuntuk label yang terlihat.iconjika Anda ingin tanda visual.handleruntuk logika panggilan balik segera.roleuntuk perilaku semantik dan gaya platform.
role bukanlah dekoratif. Gunakan destructive untuk aksi berbahaya seperti hapus. Gunakan cancel untuk jalur keluar. Peran-peran tersebut mempengaruhi cara tampilan sheet aksi dan cara pengguna membaca daftar di bawah tekanan.
Aksi berbahaya harus berada di tepi dari set pilihan, bukan dicampur dengan aksi netral dengan berat visual yang sama.
Penolakan adalah bagian dari kontrak.
Bug yang umum adalah seperti ini: seorang pengembang membuka sheet aksi, menganggap hasil handler sudah cukup, kemudian mengaktifkan navigasi atau pembaruan state sebelum overlay telah sepenuhnya ditutup. Hal itu dapat menghasilkan transisi yang tidak halus, state yang ketinggalan, atau kondisi balapan dalam tes.
Pakai siklus secara sengaja:
- Buat sheet.
await present().await onDidDismiss().- Baca peran atau data yang dikembalikan.
- Aktifkan aksi berikutnya.
Gaya itu membosankan, dan itu mengapa itu berhasil.
Contoh sederhana Angular-style dari bentuk:
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: Sheet aksi ionic bukanlah selesai ketika muncul. Selesai ketika ditutup.
Contoh Implementasi untuk Angular, React, dan Vue
Bahasa sintaks berubah-ubah di antara framework, tetapi model mentalnya tidak. Setiap versi menciptakan interaksi yang sama: pengguna mengetuk avatar, melihat opsi untuk foto profil, memilih aksi, dan aplikasi bereaksi setelah overlay tertutup.

Jika Anda juga mengelola keadaan offline untuk unggahan media, panduan ini untuk membuat layar offline di Vue Angular React cocok dengan contoh di bawah ini karena aksi foto seringkali langsung menuju ke aliran yang bergantung pada jaringan.
Contoh Angular
Di 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 sering salah di salah satu tempat. Mereka seringkali memindahkan logika yang terlalu banyak ke handler tombol, atau mereka lupa bahwa janji pemutusan adalah tempat yang lebih aman untuk mengkoordinasikan transisi UI.
Contoh React
Di Ionic React, useIonActionSheet memberikan Anda fungsi API yang kompak dan fungsional yang sesuai dengan alamiah 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;
Reaksi React API sangat ergonomis, tetapi aturan yang sama berlaku. Tetapkan handler segera fokus pada aksi yang dipilih. Gunakan callback penghapusan untuk membersihkan, analisis, atau status UI lanjutan.
Contoh Vue
Dalam Ionic Vue, actionSheetController berfungsi dengan baik di dalam Komposisi API.
<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 samping. Jika aplikasi Anda menggunakan komponen untuk logika kamera atau pilih file, panggil dari handler dan biarkan pengontrol code tipis.
Tetapkan code spesifik framework Anda kecil. Logika bisnis untuk kamera, unggah, hapus, dan analisis harus hidup di luar pengaturan sheet aksi.
Kustomisasi dan Pengaturan Tampilan dengan CSS
Pengaturan tampilan sheet aksi Ionic default biasanya cukup baik untuk prototipe. Namun, tidak selalu cukup baik untuk aplikasi yang sudah memiliki branding, dan pasti tidak cukup ketika desain ingin memiliki ruang yang lebih ketat, tipe huruf yang berbeda, atau aksi penghancuran yang lebih jelas.

Jika tim Anda mencoba membuat aplikasi seluruhnya merasa kurang seperti pembungkus web generik dan lebih seperti produk asli, artikel ini tentang konfigurasi dasar JS dan CSS untuk tampilan aplikasi asli adalah teman yang berguna untuk pengaturan tampilan sheet aksi.
Mulai dengan cssClass sebelum menggantikan pengaturan global
Aturan gaya pertama sangat sederhana. Jangan target setiap sheet 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;
}
Pendekatan ini lebih baik dalam skala daripada mengejar selektor kemudian.
Gunakan properti kustom untuk tema yang luas
Properti kustom CSS adalah cara tercepat untuk mengubah kesan umum tanpa melawan struktur komponen.
Penggunaan kasus umum termasuk:
- Warna latar dan teks ketika aplikasi Anda memiliki palet warna kustom gelap.
- Kemampuan latar belakang ketika penurunan default terasa terlalu lemah atau terlalu berat.
- spacing dan ukuran ketika ketebalan visual harus sesuai dengan tampilan 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 ketelitian
Saat desain meminta perubahan yang spesifik, properti kustom mungkin tidak cukup. Itu di mana Bagian Bayangan berperan. Mereka memungkinkan Anda untuk mengatur area internal dari sheet aksi secara 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);
}
Biasanya, gaya yang tidak efektif adalah gaya yang berlebihan pada komponen hingga komponen tersebut tidak lagi terasa seperti menu pilihan sistem. Jika Anda membutuhkan kartu yang kaya, thumbnail, deskripsi panjang, atau tata letak bar yang kompleks, Anda telah melewatkan pola sheet aksi.
Pembaruan gaya yang baik harus membuat komponen sesuai dengan aplikasi Anda, bukan menyembunyikan apa yang sebenarnya.
Topik Lanjutan dan Pertimbangan Platform
Sheet aksi produksi hidup di ruang keputusan yang lebih besar daripada kebanyakan tutorial yang mengakui. Anda tidak hanya memilih label tombol. Anda juga memutuskan apakah overlay harus dirender oleh layer web Ionic atau didelegasikan ke UI 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 sedang membangun aplikasi Ionic standar, ion-action-sheet biasanya adalah pilihan default. Ini fleksibel, mudah digaya, dan bekerja konsisten dengan sistem overlay aplikasi Anda lainnya.
Jika aplikasi Anda berbasis Capacitor dan Anda ingin sistem operasi host mengrender sheet, maka rute native adalah @capacitor/action-sheet. Dokumen Ionic yang menjelaskan plugin sekitar showActions(options) -> Promise<ShowActionsResult>, installed with npm install @capacitor/action-sheet , diinstal dengan npx cap syncdan disinkronkan dengan , sementara juga menyoroti bahwa Elemen PWA diperlukan dalam konteks web dan PWA Capacitor Action Sheet plugin docs.
__CAPGO_KEEP_0__ Dokumen Plugin Sheet Aksi
| Itu memberikan Anda tabel perdagangan praktis: | Pilihan | Kekuatan (Kelebihan) - Biaya (Kekurangan) |
|---|---|---|
ion-action-sheet | Elemen tampilan yang lebih mudah digunakan dan pola UI web yang dibagikan | Kurang sedikit kesetaraan dengan antarmuka asli |
@capacitor/action-sheet | Tampilkan rendering OS host dan perasaan platform yang lebih kuat | Keterbatasan implementasi yang lebih banyak di konteks browser dan PWA |
Pakai komponen web ketika konsistensi visual dengan aplikasi Anda lebih penting. Pakai plugin native ketika kesetaraan platform lebih penting daripada kendali 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. Tes baik-baik, terutama jika tim Anda memaksa mode tunggal di semua platform.
Aksesibilitas seringkali diabaikan karena sheet aksi terlihat kecil. Yang masih penting:
- Pakai teks tombol yang jelas yang membuat arti di luar konteks.
- Sisihkan
destructiveuntuk tindakan yang berisiko Jadi antarmuka komunikasi niat. - Tetapkan
canceljelas Jadi pengguna memiliki jalur keluar yang jelas. - Hindari ketidakjelasan dekoratif di mana beberapa aksi terdengar mirip tetapi memiliki hasil yang sangat berbeda.
Seorang pengguna dengan pembaca layar atau keterbatasan beban kognitif tidak mengalami
overlay sederhana
seederhana jika labelnya tidak jelas.
Poin tajam di sini adalah bahwa pendekatan native dan web menyelesaikan masalah yang berbeda. Komponen web memberikan Anda lebih banyak kontrol atas penampilan dan integrasi. Plugin native memberikan alihan platform yang lebih kuat. Tidak ada yang lebih baik secara otomatis. Jawaban yang tepat tergantung pada apakah masalah aplikasi saat ini Anda adalah konsistensi visual, kecepatan implementasi, atau perilaku sistem-native.
Pitfalls Pemecahan Masalah dan Mengirimkan Perbaikan UI Langsung
The first class of bug is timing. Logic runs too early because the code doesn’t wait for dismissal. You see route changes while the overlay is still animating, or state updates that race against another component’s render.
The kedua kelas adalah layout. Masalah Ionic yang dikenal melaporkan bahwa sheet aksi dapat menutupi area aman bawah pada beberapa kondisi perangkat iOS, terutama ketika --ion-safe-area-bottom tidak nol, dan laporan masalah mencatat bahwa bahkan dapat diulangi dalam demo dokumen Ionic sendiri di masalah GitHub tentang overlap area aman bawah. Ini adalah jenis masalah yang tim tidak terlewatkan sampai QA yang terlambat karena tergantung pada bentuk perangkat, mode, dan CSS kustom.
Pengaturan 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' }
]
});
Tidak akan menggantikan pengujian perangkat yang tepat, tetapi memberikan Anda tempat yang konkrit untuk memulai tanpa mengubah setiap overlay di aplikasi.
Mengapa pembaruan waktu nyata penting untuk defek UI
Kenyataan praktis operasi rilis menjadi jelas. Regresi area aman, aturan padding yang rusak, atau warna tombol destructive yang buruk seringkali hidup di JavaScript atau CSS. Jika bug tersebut dikirim ke produksi, menunggu rilis toko penuh dapat mengubah defek visual kecil menjadi hari frustrasi pengguna.
Salah satu pilihan praktis adalah layanan pembaruan waktu nyata untuk aplikasi Capacitor . Misalnya, Capgo mengirimkan bundle web yang diperbarui sehingga tim dapat mengirimkan perbaikan JavaScript, CSS, salinan, konfigurasi, dan aset tanpa harus menunggu tinjauan toko aplikasi, yang secara langsung relevan ketika bug gaya sheet aksi atau overlay melewati QA.
overlays UI adalah jenis fitur di mana jaringan keamanan itu membayar. Mereka sangat terlihat, mudah rusak dengan perubahan gaya kecil, dan biasanya dapat diperbaiki tanpa membangun native code.
Jika tim Anda mengirimkan aplikasi Ionic atau Capacitor secara teratur, Capgo layak dievaluasi sebagai bagian dari alur pelepasan Anda. Ini memberi Anda cara untuk mendorong perbaikan layer web untuk masalah seperti bug tata letak sheet aksi, regresi gaya, dan kesalahan salinan setelah pelepasan, sementara menjaga kendali atas saluran 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, Alternatif Plugin Ionic Enterprise untuk alur kerja produk di Alternatif Ionic Enterprise Plugin, Capgo Alternatif untuk alur kerja produk di Capgo Alternatif, Capgo Konsultasi untuk alur kerja produk di Capgo Konsultasi, dan Capgo Layanan Premium untuk alur kerja produk di Capgo Layanan Premium.