ion-select
Selectは、ネイティブの <select>
要素と同様に、オプションのセットからオプションを選択するためのフォームコントロールです。ユーザがselectをタップすると、すべてのオプションを含むダイアログが、選択しやすい大きなリストで表示されます。
selectは、子要素 <ion-select-option>
とともに使用する必要があります。子要素のオプションにvalue
属性が指定されていない場合、そのtextが値として使用されます。
value
が <ion-select>
にセットされている場合、オプションはその値に基づいて選択済みになります。
単一選択
デフォルトでは、selectを使用すると、ユーザは1つのOptionだけを選択できます。Alertのインターフェースでは、Optionのリストがradio button形式で表示されます。action sheetインタフェースは、1つの値選択でのみ使用できます。selectコンポーネントの値は、選択したオプションの値の値を受け取ります。
インターフェイス
デフォルトでは、select は ion-alert を使ってAlertのオプションのオーバーレイを開きます。インターフェイスを変更して、ion-action-sheet または ion-popover を使用するには、 action-sheet
または popover
を interface
プロパティに渡します。各インタフェースの制限については、他のセクションを参照してください。
Action Sheet
Popover
複数選択
multiple
属性を追加して選択すると、複数のOptionを選択できます。複数のOptionを選択できる場合は、checkbox形式のオプションのリストがAlertオーバーレイで表示されます。selectコンポーネントの値は、選択されたすべてのオプション値の配列を受け取ります。
Note: action-sheet
と popover
インターフェイスでは、複数選択は動作しません
Responding to Interaction
select とユーザーのインタラクションを処理する主な方法は、 ionChange
イベント、 ionDismiss
イベント、 ionCancel
イベントです。これらのイベントと select が発生するその他のイベントの詳細については、イベント を参照してください。
Object値について
選択した値にObjectを使用する場合、これらのObjectの識別情報がサーバーまたはデータベースからのものであれば変更できますが、選択した値の識別情報は変更されません。たとえば、目的のObject値を持つ既存の値がselectにロードされたが、新しく取得されたselectオプションが異なるIDを持つようになった場合などです。これにより、元の選択がそのままの状態であっても、選択に値がまったく表示されなくなります。
デフォルトでは、selectはObjectの等価性(===
)を使用して、オプションが選択されているかどうかを判断します。これはcompareWiths
プロパティにプロパティ名または関数を指定することで上書きできます。
Using compareWith
Object Values and Multiple Selection
Label Placement
Labelsは、デフォルトでそのコンテンツの幅を占めます。 開発者は labelPlacement
プロパティを使用して、ラベルがどのように配置されるかを制御することができます。
Justification
開発者は justify
プロパティを使用して、ラベルとコントロールの行の詰め方を制御することができます。
Filled Selects
Material Designでは、セレクトに塗りつぶしのスタイルが用意されています。セレクトの fill
プロパティは "solid"
または "outline"
のいずれかに設定することができます。
fill
スタイルはセレクトコンテナを視覚的に定義するため、fill
を使用するセレクトは ion-item
で使用すべきではありません。
SelectのButton
alertはふたつのボタンをサポートしています: Cancel
と OK
です。それぞれのボタンは、 cancelText
と okText
プロパティを使ってカスタマイズできます。
action-sheet
と popover
インタフェースには OK
ボタンがありません。いずれかのオプションをクリックすると、自動的にオーバーレイが閉じ、その値が選択されます。popover
インターフェースにはCancel
ボタンがないので、backdropをクリックするとオーバーレイが閉じます。
インターフェイスオプション
select は alert、action sheet、popover インターフェースを使用するので、interfaceOptions
プロパティを通して、これらのコンポーネントにオプションを渡すことができます。これは、カスタムヘッダー、サブヘッダー、CSS クラスなどを渡すために使用できます。
各インターフェースが受け付けるプロパティは、ion-alert docs, ion-action-sheet docs, ion-popover docs を参照してください。
Note: alert
インターフェースでは、 interfaceOptions
は inputs
や buttons
をオーバーライドしません。
カスタマイズ
Selectコンポーネントを構成する2つのユニットがあり、それぞれを別々にスタイルする必要があります。 ion-select
要素は、ビュー上で選択された値(複数可)、または何もない場合はプレースホルダー、およびドロップダウンのアイコンによって表現されます。インターフェースは、上記の インターフェース セクションで定義されており、 ion-select
をクリックすると開かれるダイアログです。インターフェースには、 ion-select-option
要素を追加することで定義されるすべてのオプションが含まれています。次のセクションでは、これらのスタイリングの違いについて説明します。
Select 要素のスタイリング
前述の通り、ion-select
要素は、ビューに表示される値 (またはプレースホルダ) とアイコンのみで構成されています。これをカスタマイズするには、CSSとCSSカスタムプロパティを組み合わせてスタイルを設定します。
また、必要な ブラウザサポート に応じて、CSSのシャドウパーツを使用してセレクトのスタイルを設定することができます。part` を使用することで、要素上の任意のCSSプロパティをターゲットにすることができることに注意してください。
Select インターフェイスのスタイリング
インターフェイスのダイアログのカスタマイズは、そのインターフェイスのドキュメントのカスタマイズのセクションにしたがって行ってください。
ただし、Selectオプションでは、スタイリングを容易にするためにクラスを設定し、オーバーレイオプションにクラスを渡す機能があります。オプションのカスタマイズの使用例については、Selectオプションのドキュメントを参照してください。
Typeahead Component
Typeaheadやオートコンプリートの機能は、既存のIonicコンポーネントを使用して構築することができます。利用可能なスクリーンスペースを最大限に活用するために、ion-modal
を使用することをお勧めします。
Interfaces
SelectChangeEventDetail
interface SelectChangeEventDetail<T = any> {
value: T;
}
SelectCustomEvent
必須ではありませんが、このコンポーネントから発行される Ionic イベントでより強く型付けを行うために、CustomEvent
インターフェースの代わりにこのインターフェースを使用することが可能です。
interface SelectCustomEvent<T = any> extends CustomEvent {
detail: SelectChangeEventDetail<T>;
target: HTMLIonSelectElement;
}
Legacy Select Syntaxからの移行
Ionic 7.0では、よりシンプルなselect構文が導入されました。この新しい構文は、selectの設定に必要な定型文を減らし、アクセシビリティの問題を解決し、開発者のエクスペリエンスを向上させます。
開発者は、この移行を一度に1つのセレクトで実行できます。開発者はレガシー構文を使い続けることができますが、できるだけ早く移行することをお勧めします。
最新の構文の使い方
最新の構文を使うには、2つのステップがあります。
- ion-label
を削除して、代わりに
ion-selectの
labelプロパティを使用します。ラベルの配置は
ion-selectの
labelPlacement` プロパティを使用して設定することができる。 - fill
と
shapeの使い方を
ion-itemから
ion-select` に移動します。
- JavaScript
- Angular
- React
- Vue
<!-- 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>
<!-- 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:" labelPlacement="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:" labelPlacement="floating">...</ion-select>
{/* Label and Label Position */}
{/* Before */}
<IonItem>
<IonLabel position="floating">Favorite Fruit:</IonLabel>
<IonSelect>...</IonSelect>
</IonItem>
{/* After */}
<IonItem>
<IonSelect label="Favorite Fruit:" labelPlacement="floating">...</IonSelect>
</IonItem>
{/* Fill */}
{/* Before */}
<IonItem fill="outline" shape="round">
<IonLabel position="floating">Favorite Fruit:</IonLabel>
<IonSelect>...</IonSelect>
</IonItem>
{/* After */}
{/* Inputs using `fill` should not be placed in IonItem */}
<IonSelect fill="outline" shape="round" label="Favorite Fruit:" labelPlacement="floating">...</IonSelect>
<!-- 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は、アプリが最新のセレクト構文を使用しているかどうかをヒューリスティックで検出します。場合によっては、レガシー構文を使い続けることが望ましい場合もあります。開発者は ion-select
の legacy
プロパティを true
に設定することで、そのInputインスタンスでレガシー構文を使用するように強制できます。
プロパティ
cancelText
Description | キャンセルボタンに表示するテキストです。 |
Attribute | cancel-text |
Type | string |
Default | 'Cancel' |
compareWith
Description | オブジェクトの値を比較するために使用されるプロパティ名または関数。 |
Attribute | compare-with |
Type | ((currentValue: any, compareValue: any) => boolean) | null | string | undefined |
Default | undefined |
disabled
Description | true の場合、ユーザはセレクトと対話することができません。 |
Attribute | disabled |
Type | boolean |
Default | false |
interface
Description | selectが使用するインターフェース。action-sheet, popoverまたは alert`. |
Attribute | interface |
Type | "action-sheet" | "alert" | "popover" |
Default | 'alert' |
interfaceOptions
Description | alert、 action-sheet、 popoverインターフェースが取ることができる追加オプション。各インターフェイスの作成オプションについては、 [ion-alert docs](./alert), [ion-action-sheet docs](./action-sheet), [ion-popover docs](./popover) を参照してください。 注意: interfaceOptionsは alertインターフェースで inputsや buttons` をオーバーライドしません。 |
Attribute | interface-options |
Type | any |
Default | {} |
mode
Description | modeは、どのプラットフォームのスタイルを使用するかを決定します。 |
Attribute | mode |
Type | "ios" | "md" |
Default | undefined |
multiple
Description | true の場合、selectは複数の値を受け入れることができる。 |
Attribute | multiple |
Type | boolean |
Default | false |
name
Description | フォームデータとともに送信されるコントロールの名前。 |
Attribute | name |
Type | string |
Default | this.inputId |
okText
Description | okボタンに表示するテキストです。 |
Attribute | ok-text |
Type | string |
Default | 'OK' |
placeholder
Description | セレクトが空のときに表示するテキストです。 |
Attribute | placeholder |
Type | string | undefined |
Default | undefined |
selectedText
Description | 選択されたオプションの値の代わりに表示するテキストです。 |
Attribute | selected-text |
Type | null | string | undefined |
Default | undefined |
value
Description | セレクトの値です。 |
Attribute | value |
Type | any |
Default | undefined |
イベント
Name | Description |
---|---|
ionBlur | セレクトのフォーカスが外れたときに発行されます。 |
ionCancel | 選択がキャンセルされたときに発します。 |
ionChange | 値が変更されたときに発行されます。 |
ionDismiss | オーバーレイが解除されたときに発行されます。 |
ionFocus | セレクトにフォーカスが当たったときに発します。 |
メソッド
open
Description | セレクトオーバーレイを開きます。オーバーレイは ion-select の interface プロパティによって、アラート、アクションシート、ポップオーバーのいずれかになります。 |
Signature | open(event?: UIEvent) => Promise<any> |
CSS Shadow Parts
Name | Description |
---|---|
icon | セレクトアイコンのコンテナです。 |
placeholder | 値がないときにセレクトに表示されるテキスト。 |
text | セレクトの表示値です。 |
CSSカスタムプロパティ
Name | Description |
---|---|
--padding-bottom | セレクトのBottom Padding |
--padding-end | セレクトの方向が左から右の場合はRight Padding、右から左の場合はLeft Paddingを行う |
--padding-start | セレクトの方向が左から右の場合はLeft Padding、右から左の場合はRight Padding |
--padding-top | セレクトのTop Padding |
--placeholder-color | セレクトPlaceholderテキストの色 |
--placeholder-opacity | 選択Placeholderテキストの不透明度 |
Slots
No slots available for this component.