メインコンテンツへスキップ
バージョン: v8

ion-select

シャドウ

セレクトは、オプションのセットから1つまたは複数のオプションを選択するためのフォームコントロールです。ユーザーがセレクトをタップすると、すべてのオプションが大きな、選択しやすいリストで表示されたダイアログが表示されます。

セレクトは、子要素である<ion-select-option>要素と一緒に使用する必要があります。子オプションにvalue属性が指定されていない場合、そのテキストが値として使用されます。

<ion-select>valueが設定されている場合、選択されたオプションはその値に基づいて選択されます。

ラベル

ラベルは、セレクトを説明するために使用する必要があります。ラベルは視覚的に使用でき、ユーザーがセレクトにフォーカスしているときには、スクリーンリーダーによって読み上げられます。これにより、ユーザーはセレクトの意図を簡単に理解できます。セレクトには、ラベルを割り当てるためのいくつかの方法があります。

セレクトには、コンポーネントにラベルを提供するためのいくつかのオプションがあります

  • labelプロパティ:プレーンテキストのラベルに使用します
  • labelスロット:カスタムHTMLラベルに使用します
  • aria-label:スクリーンリーダーにラベルを提供するために使用しますが、表示されるラベルは追加しません

ラベルの配置

ラベルはデフォルトでコンテンツの幅を取ります。開発者は、labelPlacementプロパティを使用して、ラベルをコントロールに対して相対的に配置する方法を制御できます。ここではlabelプロパティを使用していますが、labelPlacementlabelスロットでも使用できます。

ラベルスロット

プレーンテキストのラベルはlabelプロパティを介して渡す必要がありますが、カスタムHTMLが必要な場合は、代わりにlabelスロットを介して渡すことができます。

表示ラベルなし

表示ラベルが必要ない場合でも、開発者はスクリーンリーダーでセレクトにアクセスできるように、aria-labelを指定する必要があります。

単一選択

デフォルトでは、セレクトではユーザーは1つのオプションのみを選択できます。アラートインターフェースには、ラジオボタン形式のオプションのリストが表示されます。セレクトコンポーネントの値には、選択したオプションの値が設定されます。

単一選択のキーボード操作については、以下の「キーボード操作」セクションで説明します。

複数選択

セレクトにmultiple属性を追加すると、ユーザーは複数のオプションを選択できます。複数のオプションを選択できる場合、アラート、ポップオーバー、またはモーダルオーバーレイには、チェックボックス形式のオプションのリストが表示されます。セレクトコンポーネントの値には、選択されたすべてのオプション値の配列が設定されます。

注意

action-sheetインターフェースは、複数選択ではサポートされていません。

複数選択のキーボード操作については、以下の「キーボード操作」セクションで説明します。

インターフェース

デフォルトでは、セレクトはion-alertを使用して、アラート内のオプションのオーバーレイを開きます。インターフェースは、interfaceプロパティにaction-sheetpopover、またはmodalをそれぞれ渡すことで、ion-action-sheetion-popover、またはion-modalを使用するように変更できます。さまざまなインターフェースの制限事項については、他のセクションを参照してください。

アラート

アクションシート

ポップオーバー

インタラクションへの応答

セレクトとのユーザーインタラクションを処理する主な方法は、ionChangeionDismiss、およびionCancelイベントです。セレクトが発火するこれらのイベントおよびその他のイベントの詳細については、イベントを参照してください。

コンソール
上記の例からログに記録された場合、コンソールメッセージがここに表示されます。

オブジェクト値参照

セレクト値にオブジェクトを使用する場合、選択した値の同一性が同じままであっても、サーバーまたはデータベースからオブジェクトが取得されると、これらのオブジェクトの同一性が変化する可能性があります。たとえば、目的のオブジェクト値を持つ既存のレコードがセレクトにロードされたが、新しく取得したセレクトオプションが異なる同一性を持つようになった場合に、このようなことが起こる可能性があります。これにより、元の選択はそのまま残っていても、セレクトには値がないように見えます。

デフォルトでは、セレクトは厳密等価性(===)を使用して、オプションが選択されているかどうかを判断します。これは、compareWithプロパティにプロパティ名または関数を指定することで上書きできます。

compareWithの使用

コンソール
上記の例からログに記録された場合、コンソールメッセージがここに表示されます。

オブジェクト値と複数選択

コンソール
上記の例からログに記録された場合、コンソールメッセージがここに表示されます。

配置

開発者は、justifyプロパティを使用して、ラベルとコントロールを1行にどのように配置するかを制御できます。

塗りつぶされたセレクト

マテリアルデザインでは、セレクトの塗りつぶしスタイルが提供されています。セレクトのfillプロパティは、"solid"または"outline"のいずれかに設定できます。

塗りつぶされたセレクトは、セレクトのmodemdに設定することで、iOSで使用できます。

警告

fillを使用するセレクトは、コンポーネント間のスタイルの競合により、ion-itemで使用しないでください。

セレクトボタン

アラートは、キャンセルOKの2つのボタンをサポートしています。各ボタンのテキストは、cancelTextプロパティとokTextプロパティを使用してカスタマイズできます。

action-sheet および popover インターフェースには、OK ボタンがありません。いずれかのオプションをクリックすると、オーバーレイが自動的に閉じ、その値が選択されます。popover インターフェースには、キャンセル ボタンがなく、背景をクリックするとオーバーレイが閉じます。

modal インターフェースには、ヘッダーに単一の 閉じる ボタンがあります。このボタンは、モーダルを閉じるだけです。このボタンをクリックした後、または別の方法でモーダルを閉じた場合でも、選択した内容は保持されます。

インターフェースのオプション

select は、alert、action sheet、popover、modal インターフェースを使用しているため、interfaceOptions プロパティを通じてこれらのコンポーネントにオプションを渡すことができます。これを使用して、カスタムヘッダー、サブヘッダー、CSS クラスなどを渡すことができます。

各インターフェースが受け入れるプロパティについては、ion-alert のドキュメントion-action-sheet のドキュメントion-popover のドキュメント、および ion-modal のドキュメントを参照してください。

注意:interfaceOptions は、alert インターフェースで inputs または buttons を上書きしません。

開始スロットと終了スロット

start および end スロットを使用して、select の両側にアイコン、ボタン、またはプレフィックス/サフィックス テキストを配置できます。スロットのコンテンツをクリックしても、select は開きません。

注意

ほとんどの場合、これらのスロットに配置された アイコン コンポーネントには aria-hidden="true" が必要です。詳細については、アイコンのアクセシビリティに関するドキュメントを参照してください。

スロットのコンテンツを操作する場合は、ボタンなどのインタラクティブな要素でラップする必要があります。これにより、コンテンツにタブで移動できるようになります。

カスタマイズ

Select コンポーネントを構成する 2 つのユニットがあり、それぞれを個別にスタイル設定する必要があります。ion-select 要素は、ビュー上で選択された値 (またはプレースホルダー。ない場合は) とドロップダウン アイコンで表されます。上記の インターフェース セクションで定義されているインターフェースは、ion-select をクリックしたときに開くダイアログです。インターフェースには、ion-select-option 要素を追加することで定義されたすべてのオプションが含まれています。次のセクションでは、これらのスタイルの違いについて説明します。

Select 要素のスタイル設定

前述のとおり、ion-select 要素は、ビューに表示される値 (またはプレースホルダー) とアイコンのみで構成されます。これをカスタマイズするには、CSS と CSS カスタムプロパティの組み合わせを使用してスタイルを設定します。

あるいは、必要な ブラウザのサポートに応じて、CSS シャドウパーツを使用して select のスタイルを設定できます。::part を使用することで、要素の任意の CSS プロパティをターゲットにできることに注意してください。

Select インターフェースのスタイル設定

インターフェース ダイアログのカスタマイズは、そのインターフェースのドキュメントのスタイル設定セクション (CSS シャドウパーツ、CSS カスタムプロパティ、およびスロット) に従う必要があります。

ただし、Select Option は、スタイル設定を容易にするためのクラスを設定し、オーバーレイ オプションにクラスを渡すことができます。オプションのカスタマイズの使用例については、Select オプションのドキュメントを参照してください。

カスタム トグル アイコン

select テキストの横に表示されるアイコンは、toggleIcon および/または expandedIcon プロパティを使用して、任意の Ionicon に設定できます。

アイコンの反転動作

デフォルトでは、select が開いているとき、トグル アイコンは md モードで自動的に回転し、ios モードでは静止したままになります。この動作は、CSS を使用してカスタマイズできます。

以下の例では、ios での反転動作をより適切に実証するために、カスタム toggleIcon も使用しています。デフォルトのアイコンは垂直に対称であるためです。

タイプアヘッド コンポーネント

タイプアヘッドまたはオートコンプリート機能は、既存の Ionic コンポーネントを使用して構築できます。利用可能な画面スペースを最大限に活用するために、ion-modal を使用することをお勧めします。

インターフェース

SelectChangeEventDetail

interface SelectChangeEventDetail<T = any> {
value: T;
}

SelectCustomEvent

必須ではありませんが、このインターフェースは、このコンポーネントから発行された Ionic イベントに対してより強力な型付けを行うために、CustomEvent インターフェースの代わりに使用できます。

interface SelectCustomEvent<T = any> extends CustomEvent {
detail: SelectChangeEventDetail<T>;
target: HTMLIonSelectElement;
}

従来の Select 構文からの移行

Ionic 7.0 では、よりシンプルな select 構文が導入されました。この新しい構文は、select をセットアップするために必要なボイラープレートを減らし、アクセシビリティの問題を解決し、開発者のエクスペリエンスを向上させます。

開発者は、一度に 1 つずつ select の移行を実行できます。開発者は引き続き従来の構文を使用できますが、できるだけ早く移行することをお勧めします。

モダン構文の使用

モダン構文を使用するには、2 つの手順が必要です。

  1. ion-label を削除し、代わりに ion-selectlabel プロパティを使用します。ラベルの配置は、ion-selectlabelPlacement プロパティを使用して構成できます。
  2. ion-item から fill および shape の使用を ion-select に移動します。
<!-- Label and Label Position -->

<!-- Before -->
<ion-item>
<ion-label position="floating">Favorite Fruit:</ion-label>
<ion-select>...</ion-select>
</ion-item>

<!-- After -->
<ion-item>
<ion-select label="Favorite Fruit:" label-placement="floating">...</ion-select>
</ion-item>


<!-- Fill -->

<!-- Before -->
<ion-item fill="outline" shape="round">
<ion-label position="floating">Favorite Fruit:</ion-label>
<ion-select>...</ion-select>
</ion-item>

<!-- After -->

<!-- Inputs using `fill` should not be placed in ion-item -->
<ion-select fill="outline" shape="round" label="Favorite Fruit:" label-placement="floating">...</ion-select>

従来の構文の使用

Ionic は、アプリがモダン select 構文を使用しているかどうかを検出するためにヒューリスティックを使用します。場合によっては、従来の構文を使い続ける方が望ましい場合があります。開発者は、ion-selectlegacy プロパティを true に設定して、その入力のインスタンスで従来の構文を強制的に使用できます。

アクセシビリティ

キーボード操作

Ionic のキーボード操作は、すべてのプラットフォームで一貫したエクスペリエンスを実現するために、ネイティブ iOS の select ではなく、Web の実装パターンに従います。

これらのキーボード操作は、次の条件が満たされている場合、すべての ion-select 要素に適用されます。

  • select が閉じている。
  • select がフォーカスされている。
  • select が無効になっていない。
キー説明
Enterオーバーレイを開き、最初に選択したオプションにフォーカスします。選択したオプションがない場合は、最初のオプションにフォーカスします。
スペースオーバーレイを開き、最初に選択したオプションにフォーカスします。選択したオプションがない場合は、最初のオプションにフォーカスします。

単一選択

単一選択のキーボード操作は、ラジオの ARIA 実装パターンに従います。

これらのキーボード操作は、オーバーレイが表示されてフォーカスされているときに、ion-action-sheetion-alertion-popover、および ion-modal 要素に適用されます。

キー説明
ArrowDownリスト内の次のオプションにフォーカスして選択します。次のオプションがない場合は、選択が最初のオプションにサイクルします。
ArrowLeftリスト内の前のオプションにフォーカスして選択します。前のオプションがない場合は、選択が最後のオプションにサイクルします。
ArrowRightリスト内の次のオプションにフォーカスして選択します。次のオプションがない場合は、選択が最初のオプションにサイクルします。
ArrowUpリスト内の前のオプションにフォーカスして選択します。前のオプションがない場合は、選択が最後のオプションにサイクルします。
Enterオプションがフォーカスされている場合、そのオプションを選択します。OK ボタン**がない**オーバーレイは、値をすぐにコミットし、オーバーレイを閉じて、ion-select 要素にフォーカスを戻します。

OK ボタンがフォーカスされている場合は、ユーザーの選択を保存し、オーバーレイを閉じて、ion-select 要素にフォーカスを戻します。
Escape送信されたオプションを変更せずにオーバーレイを閉じます。フォーカスを ion-select 要素に戻します。
スペースフォーカスされたラジオボタンがチェックされていない場合は、現在チェックされているラジオボタンのチェックを外し、フォーカスされたラジオボタンをチェックします。それ以外の場合は、何も行いません。オーバーレイに OK ボタンがない場合は、値がすぐにコミットされ、オーバーレイが閉じます。
Tabオーバーレイ上の次のフォーカス可能な要素 (キャンセル ボタン、OK ボタン、または選択されたオプションまたは最初のオプションのいずれか) にフォーカスを移動します。次のフォーカス可能な要素がオプションである場合は、選択されたオプションにフォーカスし、それ以外の場合は最初のオプションにフォーカスします。

複数選択

複数選択のキーボード操作は、チェックボックスの ARIA 実装パターンに従います。

これらのキーボード操作は、オーバーレイが表示され、複数選択が有効になっている場合に、ion-alertion-popover、および ion-modal 要素に適用されます。

キー説明
EnterOK ボタンがフォーカスされている場合、ユーザーの選択を保存し、オーバーレイを閉じて、ion-select 要素にフォーカスを戻します。
Escape送信されたオプションを変更せずにオーバーレイを閉じます。フォーカスを ion-select 要素に戻します。
スペース現在フォーカスされているオプションを選択または選択解除します。これにより、他の選択されているオプションが選択解除されることはありません。オーバーレイに OK ボタンがない場合は、値がすぐにコミットされます。
Tabオーバーレイ上の次のフォーカス可能な要素(キャンセルボタン、'OK'ボタン、またはオプションのいずれか)にフォーカスを移動します。次のフォーカス可能な要素がオプションリストの場合、各オプションを順に反復処理する必要があります。

プロパティ

cancelText

説明キャンセルボタンに表示するテキスト。
属性cancel-text
string
デフォルト'キャンセル'

color

説明アプリケーションのカラーパレットで使用する色。デフォルトのオプションは、"primary""secondary""tertiary""success""warning""danger""light""medium""dark"です。色の詳細については、テーマ設定を参照してください。

このプロパティは、最新のselect構文を使用している場合にのみ利用可能です。
属性color
"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string | undefined
デフォルトundefined

compareWith

説明このプロパティを使用すると、開発者は、ion-selectで選択されたオプションを決定する際に、オブジェクトを比較するためのカスタム関数またはプロパティ名を指定できます。指定しない場合、デフォルトの動作では、比較に厳密な等価性(===)を使用します。
属性compare-with
((currentValue: any, compareValue: any) => boolean) | null | string | undefined
デフォルトundefined

disabled

説明trueの場合、ユーザーはselectを操作できません。
属性disabled
boolean
デフォルトfalse

expandedIcon

説明selectが開いているときに表示するトグルアイコン。定義されている場合、mdモードでのアイコン回転の動作は無効になります。未定義の場合、selectが開いているときと閉じているときの両方でtoggleIconが使用されます。
属性expanded-icon
string | undefined
デフォルトundefined

fill

説明アイテムの塗りつぶし。"solid"の場合、アイテムには背景が設定されます。"outline"の場合、アイテムはボーダー付きの透明になります。mdモードでのみ使用可能です。
属性fill
"outline" | "solid" | undefined
デフォルトundefined

interface

説明selectが使用するインターフェース:action-sheetpopoveralert、またはmodal
属性interface
"action-sheet" | "alert" | "modal" | "popover"
デフォルト'alert'

interfaceOptions

説明alertaction-sheet、またはpopoverインターフェースが使用できる追加オプション。各インターフェースの作成オプションについては、ion-alertドキュメントion-action-sheetドキュメントion-popoverドキュメント、およびion-modalドキュメントを参照してください。

注意:interfaceOptions は、alert インターフェースで inputs または buttons を上書きしません。
属性interface-options
any
デフォルト{}

justify

説明行内のラベルとselectの配置方法。labelPlacement"floating"または"stacked"に設定されている場合、ラベルとselectが別の行にあるときは、justifyは適用されません。"start":ラベルとselectは、LTRでは左側に、RTLでは右側に表示されます。"end":ラベルとselectは、LTRでは右側に、RTLでは左側に表示されます。"space-between":ラベルとselectは、行の両端に表示され、2つの要素の間にはスペースがあります。
属性justify
"end" | "space-between" | "start" | undefined
デフォルトundefined

label

説明selectに関連付けられた可視ラベル。

プレーンテキストのラベルをレンダリングする必要がある場合は、これを使用します。

labelプロパティは、labelスロットの両方が使用されている場合、labelスロットよりも優先されます。
属性label
string | undefined
デフォルトundefined

labelPlacement

説明selectに対するラベルの配置場所。"start":ラベルは、LTRではselectの左側に、RTLでは右側に表示されます。"end":ラベルは、LTRではselectの右側に、RTLでは左側に表示されます。"floating":ラベルは、selectがフォーカスされているか、値を持っている場合は、より小さく、selectの上に表示されます。それ以外の場合は、selectの上に表示されます。"stacked":ラベルは、selectがぼやけているか、値がない場合でも、常に小さく、selectの上に表示されます。"fixed":ラベルは、"start"と同じ動作をしますが、固定幅もあります。長いテキストは省略記号("...")で切り捨てられます。"floating"または"stacked"を使用する場合は、valueまたはplaceholderのいずれかでselectを初期化することをお勧めします。
属性label-placement
"end" | "fixed" | "floating" | "stacked" | "start" | undefined
デフォルト'start'

mode

説明モードは、使用するプラットフォームのスタイルを決定します。
属性mode
"ios" | "md"
デフォルトundefined

multiple

説明trueの場合、selectは複数の値を受け入れることができます。
属性multiple
boolean
デフォルトfalse

name

説明フォームデータとともに送信されるコントロールの名前。
属性name
string
デフォルトthis.inputId

okText

説明OKボタンに表示するテキスト。
属性ok-text
string
デフォルト'OK'

placeholder

説明selectが空の場合に表示するテキスト。
属性placeholder
string | undefined
デフォルトundefined

selectedText

説明選択されたオプションの値の代わりに表示するテキスト。
属性selected-text
null | string | undefined
デフォルトundefined

shape

説明selectの形状。「round」の場合、ボーダー半径が増加します。
属性shape
"round" | undefined
デフォルトundefined

toggleIcon

説明使用するトグルアイコン。iosモードの場合はchevronExpandmdモードの場合はcaretDownSharpがデフォルトです。
属性toggle-icon
string | undefined
デフォルトundefined

value

説明selectの値。
属性value
any
デフォルトundefined

イベント

名前説明バブル
ionBlurselectがフォーカスを失ったときに発生します。true
ionCancel選択がキャンセルされたときに発生します。true
ionChange値が変更されたときに発生します。

このイベントは、プログラムでvalueプロパティを設定する場合は発生しません。
true
ionDismissオーバーレイが閉じられたときに発生します。true
ionFocusselectにフォーカスがあるときに発生します。true

メソッド

open

説明selectオーバーレイを開きます。オーバーレイは、ion-selectinterfaceプロパティに応じて、アラート、アクションシート、またはポップオーバーのいずれかになります。
署名open(event?: UIEvent) => Promise<any>

CSSシャドウパーツ

名前説明
container選択されたテキストまたはプレースホルダーのコンテナ。
iconselectアイコンコンテナ。
labellabel
placeholderplaceholder
textselectの表示値。

CSSカスタムプロパティ

名前説明
--backgroundselectの背景
--border-colorselectのボーダーの色
--border-radiusselectのボーダーの半径。fill="outline"を使用する場合、半径が大きいと不均一に表示される可能性があります。必要な場合は、代わりにshape="round"を使用するか、--padding-startを大きくしてください。
--border-styleselectのボーダーのスタイル
--border-widthselectのボーダーの幅
--highlight-color-focusedフォーカス時のselectのハイライトの色
--highlight-color-invalid無効な場合のselectのハイライトの色
--highlight-color-valid有効な場合のselectのハイライトの色
--highlight-heightselectのハイライトの高さ。mdモードにのみ適用されます。
--padding-bottomselectの下部のパディング
--padding-end方向が左から右の場合は右側のパディング、方向が右から左の場合はselectの左側のパディング
--padding-start方向が左から右の場合は左側のパディング、方向が右から左の場合はselectの右側のパディング
--padding-topselectの上部のパディング
--placeholder-colorselectのプレースホルダーテキストの色
--placeholder-opacityselectのプレースホルダーテキストの不透明度
--ripple-colorMDモードでのリップル効果の色。

スロット

名前説明
endセレクトの末尾に表示するコンテンツ。
labelセレクトに関連付けるラベルテキスト。ラベルをセレクトのどの位置に配置するかは、labelPlacementプロパティで制御します。カスタムHTMLでラベルをレンダリングする必要がある場合に使用します。
startセレクトの先頭に表示するコンテンツ。