Aller directement au contenu principal

Ionic Action Sheet: Un guide complet pour 2026

Apprenez à implémenter, à personnaliser et à déboguer l'Action Sheet Ionic dans Angular, React et Vue. Un guide complet avec des exemples code et des conseils avancés pour 2026.

Martin Donadieu

Martin Donadieu

Responsable de la création de contenu

Action Sheet Ionic: Un guide complet pour 2026

Vous vous trouvez probablement dans l'une ou l'autre des situations suivantes. Soit vous avez besoin d'une façon propre pour afficher quelques actions contextuelles sans encombrer votre écran avec des boutons supplémentaires, soit vous avez déjà déployé un action sheet Ionic et découvert que la version de démonstration facile n'est pas la même chose qu'une mise en œuvre prête à la production.

Cette lacune compte. Un action sheet semble simple, mais il se situe à l'intersection du design d'interaction, des API de framework, du comportement du plateau, de l'accessibilité et de la maintenance post-lancement. Si vous ne le traitez que comme un popup avec des boutons, vous manquerez les parties qui cassent généralement tard en QA.

Table des matières

Introduction à la feuille d'actions d'Ionic

La feuille d'actions d'Ionic est l'outil approprié lorsque l'utilisateur doit effectuer une petite choix ciblé lié au contexte actuel. Supprimer un brouillon. Remplacer une photo de profil. Enregistrer, partager ou archiver un document. Ces actions sont importantes, mais elles ne méritent pas d'occuper un espace permanent dans la disposition principale.

Dans Ionic, le modèle a resté cohérent pendant longtemps. Les applications Ionic précédentes ont utilisé le $ionicActionSheet service, que TutorialsPoint décrit comme une fenêtre qui s'ouvre en glissant depuis le bas de l'écran et qui est affichée en injectant le service et en appelant show() dans le contrôleur. Les applications modernes utilisent ion-action-sheet, mais le modèle d'interaction est toujours reconnaissable, ce qui fait que le composant est l'un des exemples les plus clairs d'Ionic qui préserve les modèles d'interface utilisateur mobiles à travers les générations de frameworks dans la documentation de la feuille d'actions Ionic 1 de TutorialsPoint.

Cette continuité est utile dans les projets réels. Cela signifie que le composant n'est pas une abstraction tendance qui a changé à chaque mise à jour. C'est un modèle mobile stable qui se mappent bien aux menus d'options iOS et Android, et il ressent toujours naturellement dans les projets Angular, React et Vue.

Pourquoi les équipes continuent-elles à s'y raccrocher

Une feuille d'actions fonctionne bien lorsque l'utilisateur comprend déjà le contexte et n'a besoin que d'une liste compacte de prochaines étapes. Elle fonctionne mal lorsque l'utilisateur a besoin d'une explication, d'une validation ou de plusieurs champs de formulaire.

Une règle simple aide à décider :

  • Utilisez une feuille d'actions pour les menus de décision courts liés à un élément spécifique.
  • Utilisez un avertissement When vous avez besoin de confirmation avec des options minimales.
  • Utilisez un modèle de dialogue When l'utilisateur a besoin de plus de contenu, d'entrées ou de défilement.

Règle pratique : Si les étiquettes de bouton ne peuvent pas se tenir seules sans texte de paragraphe supplémentaire, n'imposez pas l'interaction dans un feuillet d'actions.

Dans les applications hybrides, ce modèle s'adapte également parfaitement au modèle web-natif. L'interface est simple pour être rendue dans la couche web, tout en ressentant la nativité sur les appareils tactiles. Si votre équipe construit sur Capacitor et souhaite une modélisation mentale plus claire de cette frontière, ce démantèlement de comment Capacitor relie les couches web et natives code est à garder en tête pendant que vous décidez où le feuillet d'actions devrait vivre.

Comprendre le Contrôleur de Feuillet d'Actions et API

Le feuillet d'actions devient facile à raisonner une fois que vous cessez de le considérer comme un composant inline supplémentaire. Il se comporte plus comme un surcouche temporaire avec un cycle de vie. Vous le créez, vous le présentez, vous attendez l'utilisateur, et puis vous gérez le résultat après la fermeture.

Diagramme de flux expliquant l'architecture, la configuration et les composants de API d'un Contrôleur de Feuillet d'Actions.

Pourquoi le API est piloté par un contrôleur

In le travail quotidien d'Ionic, l'approche basée sur le contrôleur est généralement la meilleure option car la feuille d'actions est éphémère. Vous ne voulez pas avoir un grand morceau de balisage de modèle dans votre page pour un menu qui ne s'affiche qu'après un clic sur un icône de débordement.

La documentation officielle d'Ionic définit la Feuille d'actions comme un dialogue modal qui nécessite la validation de l'utilisateur, et ils accordent beaucoup d'importance aux méthodes de cycle de vie de la validation, telles que onDidDismiss pour la logique post-sélection dans la documentation des Feuilles d'actions d'Ionic API. Cette conception vous indique comment structurer votre code. Présentez d'abord. Réagissez ensuite à la validation. N'attachez pas de logique critique à des hypothèses sur le timing.

Les options qui comptent vraiment

La plupart des équipes n'ont besoin que d'un petit sous-ensemble du API, mais elles doivent l'utiliser correctement.

Option Ce qu'il fait Pourquoi cela compte
header Définit l'étiquette supérieure Pratique pour le contexte lorsque les actions pourraient être ambiguës
subHeader Ajoute du texte secondaire Utile lorsque les actions nécessitent une clarification légère
buttons Définit les actions disponibles C'est là que le comportement et l'accent visuel vivent
cssClass Ajoute des classes personnalisées Essentiel pour le style scoping local au lieu de hacks globaux
mode Force le style iOS ou MD Utile pour les tests contrôlés sur plusieurs plateformes

La configuration du bouton est souvent le lieu des erreurs. Un bouton typique peut inclure :

  • text __CAPGO_KEEP_0__.
  • icon Si vous souhaitez une indication visuelle.
  • handler Pour une logique de rappel immédiate.
  • role Pour le comportement sémantique et la mise en page de la plateforme.

role n'est pas décoratif. Utilisez destructive Pour les actions dangereuses comme la suppression. Utilisez cancel Pour le chemin d'évasion. Ces rôles affectent la présentation des choix de la feuille d'action et la façon dont les utilisateurs lisent la liste sous pression.

Les actions dangereuses appartiennent aux bords du jeu de choix, et non mélangées aux actions neutres avec le même poids visuel.

Le rejet fait partie du contrat

Un bug commun se présente ainsi : un développeur ouvre une feuille d'action, suppose que le résultat du gestionnaire est suffisant, puis déclenche la navigation ou les mises à jour d'état avant que l'overlay n'ait complètement disparu. Cela peut produire des transitions floues, un état vicié ou des conditions de course dans les tests.

Utilisez le cycle de vie intentionnellement :

  1. Créez la feuille.
  2. await present().
  3. await onDidDismiss().
  4. Lisez le rôle retourné ou les données.
  5. Déclenchez la prochaine action.

Ce modèle est ennuyeux, et c'est pourquoi il fonctionne.

Voici un exemple en style Angular simple de la forme :

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);

Si vous vous souvenez seulement d'une chose du API, rappellez-vous ceci : Un feuillet d'actions Ionic n'est pas terminé lorsqu'il s'affiche. Il est terminé lorsqu'il se ferme.

Exemples d'implémentation pour Angular React et Vue

La syntaxe change d'un framework à l'autre, mais le modèle mental ne change pas. Chaque version crée la même interaction : l'utilisateur clique sur l'icône, voit des options pour la photo de profil, choisit une action et l'application répond après que l'overlay se ferme.

Trois conceptions d'écran d'interface de l'application mobile étiquetées Angular, React et Vue affichant une interface de livraison de nourriture.

Si vous gérez également les états hors ligne pour les téléchargements de médias, ce guide sur la création d'une écran hors ligne en Vue Angular React s'associe bien aux exemples ci-dessous car les actions photo mènent souvent directement à des flux dépendants du réseau.

Exemple Angular

Dans Ionic Angular, l'approche la plus courante consiste à injecter ActionSheetController dans le composant ou la page.

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);
  }
}

Les équipes Angular se trompent généralement en l'un ou l'autre des deux endroits. Ils déplacent soit trop de logique dans les gestionnaires de bouton, soit ils oublient que la promesse de fermeture est le lieu plus sûr pour coordonner les transitions d'interface utilisateur.

Exemple React

Dans Ionic React, useIonActionSheet vous donne un API fonctionnel compact qui s'intègre naturellement avec les gestionnaires d'événements.

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;

La boucle de hook API de React est ergonomique, mais la même règle s'applique. Gardez le gestionnaire immédiat axé sur l'action choisie. Utilisez les appels de rappel de fermeture pour la suppression, les analyses ou l'état d'interface utilisateur suivant.

Exemple Vue

Dans Ionic Vue, actionSheetController fonctionne proprement à l'intérieur de la composition 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>

Une différence pratique dans les projets Vue est où vous gardez les effets secondaires. Si votre application utilise des composables pour la logique de la caméra ou du sélectionneur de fichier, appelez ceux-ci à partir des gestionnaires et laissez le contrôleur code mince.

Gardez votre code spécifique au framework petit. La logique commerciale pour la caméra, l'importation, la suppression et les analyses doit vivre à l'extérieur de la configuration de la fenêtre d'action.

Personnalisation et Styling avec CSS

La mise en forme par défaut de la feuille d'actions ionic est généralement suffisante pour un prototype. Elle ne l'est pas toujours pour une application personnalisée, et encore moins lorsque le design souhaite une mise en page plus serrée, une typographie différente ou une action destructive plus évidente.

Diaporama de présentation de conception web démontrant six techniques de personnalisation et de mise en forme CSS avec des exemples de conception graphique Apple.

Si votre équipe essaie de faire en sorte que l'application entière ait l'air moins d'un enveloppe web générique et plus d'un produit natif, cet article sur la configuration de base JS et CSS pour un look d'application native est un compagnon utile à la mise en forme de la feuille d'actions.

Commencez par cssClass avant les surcharges globales

La première règle de mise en forme est simple. Ne ciblez pas toutes les feuilles d'actions de l'application à moins que vous ne le vouliez vraiment. Utilisez cssClass pour scoper une variante particulière.

const sheet = await actionSheetController.create({
  header: 'File actions',
  cssClass: 'file-actions-sheet',
  buttons: [
    { text: 'Rename' },
    { text: 'Delete', role: 'destructive' },
    { text: 'Cancel', role: 'cancel' }
  ]
});

Stylez ensuite uniquement cette instance :

.file-actions-sheet {
  --background: #101418;
  --color: #f5f7fa;
  --backdrop-opacity: 0.4;
}

Cet approche est plus échelle que de poursuivre les sélecteurs plus tard.

Utilisez les propriétés personnalisées pour un thème large

Les propriétés CSS personnalisées sont la façon la plus rapide de changer l'ambiance globale sans se battre avec la structure du composant.

Les cas d'utilisation courants incluent :

  • La couleur de fond et du texte Lorsque votre application a un palette personnalisée sombre.
  • L'opacité du fond d'écran Lorsque la dimming par défaut ressemble à être trop faible ou trop lourd.
  • Les espacements et les tailles Lorsque la densité visuelle doit correspondre au reste de votre interface.
.file-actions-sheet {
  --background: #1b1f24;
  --color: #ffffff;
  --backdrop-opacity: 0.32;
  --button-color: #dce3ea;
  --button-background-hover: #2a3138;
}

Utilisez les parties d'ombre lorsque vous avez besoin de précision

Une fois que le design demande des changements ciblés, les propriétés personnalisées peuvent ne pas suffire. C'est là que les parties d'ombre entrent en jeu. Elles vous permettent de styliser les zones internes du menu de choix système plus directement.

.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);
}

Ce qui ne fonctionne généralement pas bien est de sur-styliser le composant jusqu'à ce qu'il ne ressemble plus à un menu de choix système. Si vous avez besoin de cartes riches, de vignettes, de descriptions longues ou de dispositions de ligne complexes, vous avez dépassé le modèle de menu de choix.

Une bonne passe de personnalisation devrait faire en sorte que le composant corresponde à votre application, et non qu'il cache ce qu'il est.

Thèmes avancés et considérations de plateforme

Les fenêtres de dialogue de production vivent dans un espace de décision plus vaste que la plupart des tutoriels ne l'admettent. Vous ne choisissez pas seulement les étiquettes des boutons. Vous décidez si l'overlay doit être rendu par la couche web d'Ionic ou délégué à l'interface utilisateur native, combien fortement vous souhaitez un comportement spécifique à la plateforme et comment vous vous assurez que la feuille reste compréhensible pour tous les utilisateurs.

Une image divisée montrant des formes géométriques abstraites en 3D sur un fond noir et une figue sur un fond vert de pierre.

Composant web ou plugin natif

Si vous construisez une application Ionic standard, ion-action-sheet est généralement la valeur par défaut. C'est flexible, facile à personnaliser et fonctionne de manière cohérente avec le reste du système de fenêtres de votre application.

Si votre application est basée sur Capacitor et que vous souhaitez que le système d'exploitation hôte rende la feuille, la route native est @capacitor/action-sheet. Les documents d'Ionic mentionnent les plugins autour de showActions(options) -> Promise<ShowActionsResult>, installés avec npm install @capacitor/action-sheet , synchronisés avec npx cap sync, tout en notant que Les éléments PWA sont nécessaires dans les contextes web et PWA Dans le Capacitor documentation de l'extension de feuille de dialogue de Capgo.

Cela vous donne une table de compensation pratique :

Choix Force Coût
ion-action-sheet Un thème plus facile à mettre en œuvre et des modèles de UI web partagés Un peu moins de fidélité native
@capacitor/action-sheet Rendu par le système d'exploitation et un sentiment de plateforme plus fort Plus de contraintes d'implémentation dans les contextes navigateur et PWA

Utilisez le composant web lorsque la cohérence visuelle avec votre application compte plus. Utilisez l'extension native lorsque la fidélité de la plateforme compte plus que le contrôle CSS profond.

Mode de plateforme et détails d'accessibilité

Ionic peut s'adapter aux modes iOS et Material Design, et cela affecte l'espace, la motion et l'ensemble de la tonalité visuelle. N'assumez pas que votre stylage se comporte de la même manière dans les deux modes. Testez les deux intentionnellement, surtout si votre équipe impose un seul mode sur tous les plateformes.

La accessibilité est également négligée car les feuilles d'actions semblent petites. Les bases sont toujours importantes :

  • Utilisez un texte de bouton clair qui a du sens hors de contexte.
  • Réservez destructive pour les actions risquées afin que l'interface communique l'intention.
  • Gardez cancel explicit afin que l'utilisateur ait un chemin de sortie clair.
  • Évitez l'ambiguïté décorative où plusieurs actions semblent similaires mais ont des résultats très différents.

A un utilisateur utilisant un lecteur d'écran ou souffrant de contraintes cognitives, les surimpressions « simples » ne sont pas perçues comme simples si les étiquettes sont vagues.

Le point acéré ici est que les approches natives et web résolvent des problèmes différents. Le composant web vous donne plus de contrôle sur l'apparence et l'intégration. Le plugin natif vous donne une meilleure alignement sur la plateforme. Rien n'est automatiquement meilleur. La bonne réponse dépend de savoir si votre douleur actuelle d'application est la cohérence visuelle, la rapidité d'implémentation ou le comportement natif du système.

Les pièges de dépannage et les correctifs de mise en ligne de l'interface utilisateur

La plupart des bogues des feuilles d'actions ionic ne se manifestent pas lorsque vous mettez en place trois boutons et que vous les cliquez dans un simulateur. Ils apparaissent plus tard, lorsque la feuille est stylisée, testée sur des appareils plus récents et combinée avec la navigation et les transitions d'état réelles.

Les bogues qui apparaissent après que le démo fonctionne

La première classe de bogues est le timing. La logique s'exécute trop tôt parce que le code ne fait pas attendre la fermeture. Vous voyez les changements de route pendant que la surimpression est encore en animation, ou les mises à jour d'état qui se disputent avec la rendu d'un autre composant.

La deuxième classe est la disposition. Un problème connu d'Ionic rapporte que la feuille d'action peut chevaucher la zone de sécurité inférieure sur certains appareils iOS, surtout lorsque --ion-safe-area-bottom est non nul, et le rapport de problème note qu'il peut même être reproduit dans la démo des docs d'Ionic sur le GitHub problème de chevauchement de la zone de sécurité inférieure.Troubleshooting Pitfalls and Shipping Live UI Fixes

Une solution pratique pour la zone de sécurité

Si votre application affiche la feuille trop près de la zone de l'indicateur d'accueil, commencez par un override étendu plutôt qu'un patch global large.

.safe-area-sheet::part(container) {
  padding-bottom: calc(env(safe-area-inset-bottom) + 8px);
}

Appliquez ensuite la classe lors de la création de la feuille d'action :

const sheet = await actionSheetController.create({
  header: 'More actions',
  cssClass: 'safe-area-sheet',
  buttons: [
    { text: 'Archive' },
    { text: 'Delete', role: 'destructive' },
    { text: 'Cancel', role: 'cancel' }
  ]
});

Cela ne remplacera pas les tests de dispositif appropriés, mais cela vous donne un endroit concret pour commencer sans modifier chaque surcouche de l'application.

Pourquoi les mises à jour en temps réel sont importantes pour les défauts d'interface utilisateur

Les réalités pratiques des opérations de publication deviennent évidentes. Une regression de la zone de sécurité, une règle de padding brisée ou une couleur de bouton destructeur incorrecte se trouvent souvent dans JavaScript ou CSS. Si ce bug est expédié en production, attendre une mise à jour complète de l'App Store peut transformer un petit défaut visuel en jours de frustration pour les utilisateurs.

Une option pratique est un service de mise à jour en temps réel pour les applications Capacitor. Par exemple, Capgo fournit des ensembles de web mis à jour afin que les équipes puissent expédier des correctifs JavaScript, CSS, copie, configuration et ressources sans attendre la revue de l'App Store, ce qui est directement pertinent lorsque qu'un bug de style ou d'overlay passe les tests de QA.

Les surcouche d'interface utilisateur sont exactement le type de fonctionnalité où ce filet de sécurité est payant. Ils sont très visibles, faciles à briser avec de petites modifications de style et généralement réparable sans reconstruire nativement code.


Si votre équipe expédie régulièrement des applications Ionic ou Capacitor, Capgo est digne d'être évalué comme partie de votre flux de publication. Il vous donne un moyen de pousser des correctifs pour la couche web pour des problèmes comme les bugs de mise en page de la feuille d'action, les régressions de style et les erreurs de copie après la publication, tout en gardant le contrôle sur les canaux de déploiement et le comportement de mise à jour.

Continuez de suivre Ionic Action Sheet : Guide complet pour 2026

Si vous utilisez Ionic Action Sheet : Guide complet pour 2026 pour planifier la migration et les opérations d'entreprise, connectez-le avec Capgo Entreprise pour le flux de travail du produit dans Capgo Entreprise, Alternatives de plugin Ionic Entreprise pour le flux de travail du produit dans Alternatives de plugin Ionic Entreprise, Capgo Alternatives pour le flux de travail du produit dans Capgo Alternatives, Capgo Conseil pour le flux de travail du produit dans Capgo Consulting, et Capgo Support Premium pour le flux de travail du produit dans Capgo Support Premium.

Mises à jour en temps réel pour les applications Capacitor

Lorsqu'un bug de la couche web est en direct, expédiez la correction à travers Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les modifications natives restent dans le chemin de revue normal.

Commencez maintenant

Dernières actualités de notre Blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.