Sauter au contenu principal

Feuille d'actions Ionic : Guide complet pour 2026

Apprenez à mettre en œuvre, à personnaliser et à dépanner la Feuille d'actions Ionic dans Angular, React et Vue. Un guide complet avec des exemples code et des conseils avancés pour 2026.

Martin Donadieu

Martin Donadieu

Spécialiste du contenu

Guide complet de l'Action Sheet Ionic 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é une feuille d'actions 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 différence compte. Une feuille d'actions peut paraître simple, mais elle 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 la traitez que comme une fenêtre de popup avec des boutons, vous manquerez les parties qui brisent généralement tard en QA.

Table des matières

Introduction à la feuille d'action d'Ionic

La feuille d'action d'Ionic est l'outil approprié lorsque l'utilisateur doit effectuer une petite, focalisée choix 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 anciens applications Ionic 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 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'action d'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 se sent toujours naturel dans les projets Angular, React et Vue.

Why les équipes continuent de s'y référer

Un panneau d'action fonctionne bien lorsque l'utilisateur comprend déjà le contexte et n'a besoin que d'une liste compacte des étapes suivantes. Il fonctionne mal lorsque l'utilisateur a besoin d'une explication, d'une validation ou de plusieurs champs de formulaire.

Une règle simple aide :

  • Utilisez un panneau d'action pour des menus de décision courts liés à un élément spécifique.
  • Utilisez un avertissement lorsque vous avez besoin de confirmation avec des options minimales.
  • Utilisez un modèle lorsque 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 panneau d'action.

Dans les applications hybrides, ce modèle s'adapte également parfaitement au modèle web-natif. L'interface est simple enough pour être rendue dans la couche web, tout en ressentant natif 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 How Capacitor relie les web et les natives code est important de garder à l'esprit pendant que vous décidez où l'onglet d'action doit vivre.

Comprendre le Contrôleur de l'Onglet d'Action et API

L'onglet d'action devient facile à raisonner une fois que vous arrêtez de le considérer comme juste un autre composant inline. 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.

Un diagramme de flux expliquant l'architecture, la configuration et les composants de API d'un Contrôleur d'Onglet d'Action.

Pourquoi le API est piloté par un contrôleur

Dans le travail quotidien d'Ionic, l'approche basée sur le contrôleur est généralement la meilleure option car l'onglet d'action est éphémère. Vous ne voulez pas une grande partie de la mise en forme de modèle dans votre page pour un menu qui n'apparaît que après un clic sur un icône de débordement.

Les documents officiels d'Ionic définissent l'Onglet d'Action comme un dialogue modal qui nécessite la fermeture de l'utilisateur, et ils accordent beaucoup d'importance aux méthodes de cycle de vie de fermeture telles que onDidDismiss pour la logique de sélection postérieure dans les documents d'Ionic sur l'Onglet d'Action API. Ce design vous indique comment structurer votre code. Présentez-vous en premier. Réagissez après le rejet. N'associez pas la logique critique aux hypothèses sur le timing.

Les options qui comptent vraiment

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

OptionCe qu'il faitPourquoi cela compte
headerDéfinit l'étiquette supérieureBon pour le contexte lorsque les actions pourraient être ambiguës
subHeaderAjoute du texte secondaireUtile lorsque les actions nécessitent une clarification légère
buttonsDéfinit les actions disponiblesC'est là où la comportement et l'accent visuel vivent
cssClassAjoute des classes personnaliséesEssentiel pour le style scoped au lieu de hacks mondiaux
modeForce le style iOS ou MDUtile pour des tests contrôlés sur plusieurs plateformes

La configuration du bouton est souvent le point où les erreurs se produisent. Un bouton typique peut inclure :

  • text pour l'étiquette visible.
  • icon si vous souhaitez une indication visuelle.
  • handler pour la logique de rappel immédiate.
  • role pour le comportement sémantique et le style de la plateforme.

role n'est pas décoratif. Utilisez destructive pour les actions dangereuses comme la suppression. Utilisez cancel pour la voie de secours. 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 doivent appartenir à la limite du jeu de choix, et non être mélangées aux actions neutres avec le même poids visuel.

La fermeture fait partie du contrat.

Un bug commun se présente ainsi : un développeur ouvre une fenêtre 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 entraîner des transitions floues, des états périmés 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 ou les données retournés.
  5. Déclenchez la prochaine action.

Ce modèle est ennuyant, 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 : Une feuille d'action ionic n'est pas terminée lorsqu'elle apparaît. C'est terminé lorsqu'elle se ferme.

Exemples d'implémentation pour Angular, React et Vue

La syntaxe change d'un cadre à l'autre, mais le modèle mental reste le même. Chaque version crée la même interaction : l'utilisateur clique sur l'avatar, voit les 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'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 dans Vue Angular React se complète bien avec les exemples ci-dessous car les actions photo mènent souvent directement à des flux dépendants du réseau. Exemple Angular

Dans Ionic Angular, la méthode la plus courante consiste à injecter

dans le composant ou la page. ActionSheetController Les équipes Angular se trompent souvent en l'un ou l'autre des deux endroits. Elles déplacent soit trop de logique dans les gestionnaires de bouton, soit elles oublient que la promesse de fermeture est le lieu plus sûr pour coordonner les transitions d'interface.

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

Exemple React

Dans Ionic React,

vous donne un __CAPGO_KEEP_0__ fonctionnel compact qui s'intègre naturellement avec les gestionnaires d'événements. useIonActionSheet gives you a compact functional API that fits naturally with event handlers.

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;

Les hooks React API sont ergonomiques, mais la même règle s'applique. Gardez l'handler immédiat concentré sur l'action choisie. Utilisez les appels de rappel de rejet pour la suppression, les analyses ou l'état UI de suivi.

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 fichiers, appelez ceux-ci depuis les handlers et laissez le contrôleur code mince.

Gardez votre code spécifique à la plateforme petite. La logique métier pour la caméra, l'importation, la suppression et les analyses devrait vivre à l'extérieur de la configuration de la feuille d'actions.

Personnalisation et Styling avec CSS

La mise en page par défaut de la feuille d'actions Ionic est généralement suffisante pour un prototype. Ce n'est pas toujours suffisant pour une application personnalisée, et ce n'est certainement pas suffisant lorsque le design souhaite une espacement plus serré, une typographie différente ou une action destructive plus évidente.

Diapositive de présentation de conception web démontrant six techniques de personnalisation et de mise en page CSS différentes, avec des exemples de conception graphique Apple.

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

Commencez par cssClass avant les surcharges globales

La première règle de style est simple. Ne ciblez pas tous les panneaux d'action 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;
}

Cette approche s'adapte mieux que de poursuivre les sélecteurs plus tard.

Utilisez des 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 générale sans se battre avec la structure du composant.

Les cas d'utilisation courants incluent :

  • Couleur de fond et de texte lorsque votre application possède un palette personnalisée sombre.
  • Opacité du fond d'écran lorsque la dimming par défaut semble trop faible ou trop lourde.
  • Éléments de mise en page et de dimensionnement 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

Lorsque 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 sont importantes. Elles vous permettent de personnaliser les zones internes du feuillet d'actions de manière plus directe.

.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, c'est 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 miniatures, de descriptions longues ou de dispositions de ligne complexes, vous avez dépassé le modèle du feuillet d'actions.

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

Sujets avancés et considérations de plateforme

Les feuilles d'actions de production vivent dans un espace de décision plus vaste que la plupart des tutoriels ne le reconnaissent. 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 native, combien de comportement spécifique à la plateforme vous souhaitez et comment vous vous assurez que le feuillet reste compréhensible pour tous les utilisateurs.

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

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 de votre système d'overlay d'application.

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

Cela vous donne une table de compromis pratique :

ChoixForceCout
ion-action-sheetThèmes plus faciles et modèles de l'interface web partagésUn peu moins de fidélité native
@capacitor/action-sheetRendu de l'hôte OS et un sentiment de plateforme plus fortPlus de contraintes d'implémentation dans les contextes de navigateur et de PWA

Utilisez le composant web lorsque la cohérence visuelle avec votre application compte plus. Utilisez le plugin natif 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 intentionnellement les deux, surtout si votre équipe impose un seul mode sur tous les plateformes.

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

  • Utilisez du texte de bouton clair qui a du sens hors de contexte.
  • Réservez destructive pour les actions risquées Par conséquent, l'interface transmet l'intention.
  • Conservation cancel explicite Ainsi, l'utilisateur a un chemin de sortie clair.
  • Éviter l'ambiguïté décorative Lorsque plusieurs actions semblent similaires mais ont des résultats très différents.

Un utilisateur avec un lecteur d'écran ou des contraintes de charge cognitive n'expérimente pas les « surcouches » simples 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 vitesse de mise en œuvre ou le comportement natif du système.

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

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 n'attend pas la fermeture. Vous voyez les changements de route pendant que la surcouche est encore en train d'animé, ou les mises à jour d'état qui se disputent avec une autre composante de rendu.

The deuxième classe est layout. Un problème Ionic connu rapporte que la feuille d'action peut chevaucher la zone de sécurité inférieure sur certains appareils iOS, en particulier lorsque --ion-safe-area-bottom n'est pas nul, et le rapport de problème note qu'il peut même être reproduit dans les propres démos de documentation d'Ionic dans le the GitHub issue about bottom safe area overlap. C'est exactement le type de problème que les équipes manquent jusqu'à la fin de la phase QA car il dépend de la forme de l'appareil, du mode et du CSS personnalisé.

Une solution pratique pour la zone de sécurité

Si votre application affiche la feuille trop près de la zone d'indicateur de maison, commencez par un override scoping plutôt qu'une correction globale.

.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 complets, 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 de l'interface utilisateur

Les réalités pratiques des opérations de publication deviennent évidentes. Une régression de la zone de sécurité, une règle de marge 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 la boutique peut transformer un petit défaut visuel en jours de frustration pour les utilisateurs.

One practical option is a live update service for Capacitor apps. For example, Capgo propose des mises à jour de bundles web pour que les équipes puissent déployer des correctifs JavaScript, CSS, copie, configuration et actifs sans attendre la revue de l'App Store, ce qui est directement pertinent lorsque des bugs d'affichage d'une fenêtre d'action ou d'un surplomb glissent entre les mailles de la QA.

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


Si votre équipe déploye régulièrement des applications Ionic ou Capacitor Capgo est digne d'être évalué en tant que partie intégrante de votre flux de mise à jour. Il vous donne un moyen de pousser des correctifs pour les problèmes tels que les bugs de mise en page des fenêtres d'action, les régressions de style et les erreurs de copie après la mise en production, tout en conservant le contrôle sur les canaux de déploiement et le comportement de mise à jour.

Continuez à partir de l'article complet sur les fenêtres d'action Ionic : Guide complet pour 2026

Si vous utilisez Guide complet sur les fenêtres d'action Ionic : Guide complet pour 2026 pour planifier la migration et les opérations d'entreprise, connectez-le à Capgo Enterprise pour le flux de travail du produit dans Capgo Enterprise Alternatives aux plugins d'entreprise Ionic pour le flux de travail du produit dans les alternatives Ionic Enterprise Plugin Capgo Alternatives pour le flux de travail du produit dans Capgo Alternatives, Capgo Consulting 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 direct pour les applications Capacitor

Lorsqu'un bug de la couche web est en ligne, expédiez la correction par le biais de 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 changements natifs restent dans la voie de revue normale.

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 véritablement professionnelle.