scoped
アラートは、ユーザーに情報を提示したり、Inputを使ってユーザーから情報を収集したりするダイアログである。アラートはアプリのコンテンツの上に表示され、アプリとの対話を再開する前に、ユーザーが手動で解除する必要があります。また、オプションで header
、subHeader
、message
を持つことができます。
ion-alert
は、テンプレートに直接コンポーネントを記述して使用することができます。これにより、アラートを表示するために必要なハンドラの数を減らすことができます。
src/app/example.component.html src/app/example.component.ts< ion-button id = " present-alert " > Click Me </ ion-button > < ion-alert trigger = " present-alert " header = " A Short Title Is Best " subHeader = " A Sub Header Is Optional " message = " A message should be a short, complete sentence. " [buttons] = " alertButtons " > </ ion-alert >
import { Component } from '@angular/core' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { alertButtons = [ 'Action' ] ; }
ion-alert
の isOpen
プロパティは、開発者がアプリケーションの状態からアラートの表示状態を制御することを可能にします。つまり、isOpen
を true
に設定するとアラートが表示され、isOpen
を false
に設定するとアラートは解除されます。
isOpen
は一方通行のデータバインディングを使用しているため、アラートが解除されたときに自動的に false
に設定されることはありません。開発者は ionAlertDidDismiss
または didDismiss
イベントを待ち、isOpen
を false
に設定する必要があります。この理由は、ion-alert
の内部がアプリケーションの状態と密接に結合するのを防ぐためである。一方通行のデータバインディングでは、アラートはリアクティブ変数が提供するブーリアン値だけを気にすればよい。双方向のデータバインディングでは、アラートはブーリアン値とリアクティブ変数の存在の両方に関心を持つ必要があります。これは、非決定的な動作につながり、アプリケーションのデバッグを困難にする可能性があります。
src/app/example.component.html src/app/example.component.ts< ion-button (click) = " setOpen(true) " > Click Me </ ion-button > < ion-alert [isOpen] = " isAlertOpen " header = " A Short Title Is Best " subHeader = " A Sub Header Is Optional " message = " A message should be a short, complete sentence. " [buttons] = " alertButtons " (didDismiss) = " setOpen(false) " > </ ion-alert >
import { Component } from '@angular/core' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { isAlertOpen = false ; alertButtons = [ 'Action' ] ; setOpen ( isOpen : boolean ) { this . isAlertOpen = isOpen ; } }
alertController
は、アラートを表示するタイミングや解除するタイミングをより細かく制御する必要がある場合に使用することができる。
src/app/example.component.html src/app/example.component.ts< ion-button (click) = " presentAlert() " > Click Me </ ion-button >
import { Component } from '@angular/core' ; import { AlertController } from '@ionic/angular' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { constructor ( private alertController : AlertController ) { } async presentAlert ( ) { const alert = await this . alertController . create ( { header : 'A Short Title Is Best' , subHeader : 'A Sub Header Is Optional' , message : 'A message should be a short, complete sentence.' , buttons : [ 'Action' ] , } ) ; await alert . present ( ) ; } }
buttons
の配列には、各buttonの text
のプロパティと、オプションで handler
を利用することができます。 handler
が false
を返した場合、buttonがクリックされてもAlertは自動的に解除されません。すべての buttons
は、左から右にボタン配列に追加された順序で表示されます。 Note: 一番右のボタン(配列の最後の1つ)がメインボタンです。
オプションで、cancel
のような role
プロパティをボタンに追加することができます。もし cancel
ロールがボタンのいずれかに設定されている場合、バックドロップをタップしてアラートが解除されると、キャンセルロールを持つボタンから handler が起動されます。
Console messages will appear here when logged from the example above.
src/app/example.component.html src/app/example.component.ts< ion-button id = " present-alert " > Click Me </ ion-button > < ion-alert trigger = " present-alert " header = " Alert! " [buttons] = " alertButtons " (didDismiss) = " setResult($event) " > </ ion-alert >
import { Component } from '@angular/core' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { public alertButtons = [ { text : 'Cancel' , role : 'cancel' , handler : ( ) => { console . log ( 'Alert canceled' ) ; } , } , { text : 'OK' , role : 'confirm' , handler : ( ) => { console . log ( 'Alert confirmed' ) ; } , } , ] ; setResult ( ev ) { console . log ( ` Dismissed with role: ${ ev . detail . role } ` ) ; } }
Alertには、複数の異なるInputを含めることもでき、そのデータをアプリで受け取ることができます。 Inputはユーザーに情報の入力を促す簡単な方法として使用できます。Radios, checkboxes と text inputs textarea はすべて利用できますが、これらを混ぜて利用することはできません。例えば、Alertはすべてbutton Inputであったり、すべてcheckboxでのInputを持つことはできますが、同一のAlertにradioとcheckbox Inputを混ぜることはできません。ただし、"text" Inputでは、 url
, email
, text
などの複数のtypeを混ぜて利用することはできます。アラートのガイドラインに収まらない複雑なForm UIが必要な場合は、代わりにModal内でFormを構築することをお勧めします。
src/app/example.component.html src/app/example.component.ts< ion-button id = " present-alert " > Click Me </ ion-button > < ion-alert trigger = " present-alert " header = " Please enter your info " [buttons] = " alertButtons " [inputs] = " alertInputs " > </ ion-alert >
import { Component } from '@angular/core' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { public alertButtons = [ 'OK' ] ; public alertInputs = [ { placeholder : 'Name' , } , { placeholder : 'Nickname (max 8 characters)' , attributes : { maxlength : 8 , } , } , { type : 'number' , placeholder : 'Age' , min : 1 , max : 100 , } , { type : 'textarea' , placeholder : 'A little about yourself' , } , ] ; }
src/app/example.component.html src/app/example.component.ts< ion-button id = " present-alert " > Click Me </ ion-button > < ion-alert trigger = " present-alert " header = " Select your favorite color " [buttons] = " alertButtons " [inputs] = " alertInputs " > </ ion-alert >
import { Component } from '@angular/core' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { public alertButtons = [ 'OK' ] ; public alertInputs = [ { label : 'Red' , type : 'radio' , value : 'red' , } , { label : 'Blue' , type : 'radio' , value : 'blue' , } , { label : 'Green' , type : 'radio' , value : 'green' , } , ] ; }
Alertはscopedによるカプセル化を使用しており、実行時に各スタイルにクラスを追加することで自動的にCSSをスコープします。CSSでscopedセレクタをオーバーライドするには、higher specificity セレクタが必要です。
create
メソッドで cssClass
にカスタムクラスを渡し、それを使ってホストと内部要素にカスタムスタイルを追加することをお勧めします。このプロパティは、スペースで区切られた複数のクラスを受け付けることもできます。
.alert-wrapper { background : #e5e5e5 ; } .my-custom-class .alert-wrapper { background : #e5e5e5 ; }
CSSカスタムプロパティ は、個々の要素をターゲットにすることなく、アラートのスタイルに使用することができます。
.my-custom-class { --background : #e5e5e5 ; }
src/app/example.component.html src/app/example.component.ts src/global.css< ion-button id = " present-alert " > Click Me </ ion-button > < ion-alert trigger = " present-alert " class = " custom-alert " header = " Are you sure? " [buttons] = " alertButtons " > </ ion-alert >
import { Component } from '@angular/core' ; @ Component ( { selector : 'app-example' , templateUrl : 'example.component.html' , } ) export class ExampleComponent { public alertButtons = [ { text : 'No' , cssClass : 'alert-button-cancel' , } , { text : 'Yes' , cssClass : 'alert-button-confirm' , } , ] ; }
ion-alert .custom-alert { --backdrop-opacity : 0.7 ; } .custom-alert .alert-button-group { padding : 8 px ; } button .alert-button .alert-button-confirm { background-color : var ( --ion-color-success ) ; color : var ( --ion-color-success-contrast ) ; } .md button .alert-button .alert-button-confirm { border-radius : 4 px ; } .ios .custom-alert button .alert-button { border : 0.55 px solid rgba ( var ( --ion-text-color-rgb , 0 , 0 , 0 ) , 0.2 ) ; } .ios button .alert-button .alert-button-cancel { border-right : 0 ; border-bottom-left-radius : 13 px ; border-top-left-radius : 13 px ; } .ios button .alert-button .alert-button-confirm { border-bottom-right-radius : 13 px ; border-top-right-radius : 13 px ; }
IonicのAngularアプリを構築する場合、スタイルはグローバルなスタイルシートファイルに追加する必要があります。
アラートは、スクリーンリーダーにとってアクセシブル であるために、ariaプロパティを設定しますが、これらのプロパティは、十分な説明がない場合、またはアラートがアプリでどのように使用されているかと一致しない場合は、オーバーライドすることができます。
Ionicは自動的にアラートのrole
を、入力やボタンがある場合はalertdialog
に、何もない場合はalert
に設定します。
アラートに header
プロパティが定義されている場合、aria-labelledby
属性は自動的にヘッダの ID に設定されます。 header
が定義されていない場合、subHeader
要素がフォールバックとして使用されます。同様に、 aria-describedby
属性が定義されている場合は、自動的に message
要素の ID が設定されます。
ARIAの仕様に合わせるために、アラートには message
と header
または subHeader
を含めることを強くお勧めします。もし header
や subHeader
を含めない場合は、htmlAttributes
プロパティを使用して、説明的な aria-label
を指定することができます。
Angular Javascript React Vue const alert = await this . alertController . create ( { message : 'This is an alert with custom aria attributes.' , htmlAttributes : { 'aria-label' : 'alert dialog' , } , } ) ;
const alert = await this . alertController . create ( { message : 'This is an alert with custom aria attributes.' , htmlAttributes : { 'aria-label' : 'alert dialog' , } , } ) ;
useIonAlert ( { message : 'This is an alert with custom aria attributes.' , htmlAttributes : { 'aria-label' : 'alert dialog' , } , } ) ;
const alert = await alertController . create ( { message : 'This is an alert with custom aria attributes.' , htmlAttributes : { 'aria-label' : 'alert dialog' , } , } ) ;
すべてのARIA属性は、アラートのhtmlAttributes
プロパティにカスタム値を定義することで、手動で上書きすることができます。
Buttons containing text will be read by a screen reader. If a description other than the existing text is desired, a label can be set on the button by passing aria-label
to the htmlAttributes
property on the button.
Angular Javascript React Vue const alert = await this . alertController . create ( { header : 'Header' , buttons : [ { text : 'Exit' , htmlAttributes : { 'aria-label' : 'close' , } , } , ] , } ) ;
const alert = await this . alertController . create ( { header : 'Header' , buttons : [ { text : 'Exit' , htmlAttributes : { 'aria-label' : 'close' , } , } , ] , } ) ;
useIonAlert ( { header : 'Header' , buttons : [ { text : 'Exit' , htmlAttributes : { 'aria-label' : 'close' , } , } , ] , } ) ;
const alert = await alertController . create ( { header : 'Header' , buttons : [ { text : 'Exit' , htmlAttributes : { 'aria-label' : 'close' , } , } , ] , } ) ;
type AlertButtonOverlayHandler = boolean | void | { [ key : string ] : any } ; interface AlertButton { text : string ; role ? : 'cancel' | 'destructive' | string ; cssClass ? : string | string [ ] ; id ? : string ; htmlAttributes ? : { [ key : string ] : any } ; handler ? : ( value : any ) => AlertButtonOverlayHandler | Promise < AlertButtonOverlayHandler > ; }
interface AlertInput { type ? : TextFieldTypes | 'checkbox' | 'radio' | 'textarea' ; name ? : string ; placeholder ? : string ; value ? : any ; label ? : string ; checked ? : boolean ; disabled ? : boolean ; id ? : string ; handler ? : ( input : AlertInput ) => void ; min ? : string | number ; max ? : string | number ; cssClass ? : string | string [ ] ; attributes ? : { [ key : string ] : any } ; tabindex ? : number ; }
interface AlertOptions { header ? : string ; subHeader ? : string ; message ? : string | IonicSafeString ; cssClass ? : string | string [ ] ; inputs ? : AlertInput [ ] ; buttons ? : ( AlertButton | string ) [ ] ; backdropDismiss ? : boolean ; translucent ? : boolean ; animated ? : boolean ; htmlAttributes ? : { [ key : string ] : any } ; mode ? : Mode ; keyboardClose ? : boolean ; id ? : string ; enterAnimation ? : AnimationBuilder ; leaveAnimation ? : AnimationBuilder ; }
Description true
の場合、アラートはアニメーションで表示されます。Attribute animated
Type boolean
Default true
Description true
の場合、バックドロップがクリックされるとアラートが解除される。Attribute backdrop-dismiss
Type boolean
Default true
Description アラートに追加されるボタンの配列。 Attribute undefined
Type (string | AlertButton)[]
Default []
Description カスタムCSSに適用する追加のクラス。複数のクラスを指定する場合は、スペースで区切る必要があります。 Attribute css-class
Type string | string[] | undefined
Default undefined
Description アラート提示時に使用するアニメーションです。 Attribute undefined
Type ((baseEl: any, opts?: any) => Animation) | undefined
Default undefined
Description アラートの見出しにあるメインタイトルです。 Attribute header
Type string | undefined
Default undefined
Description アラートに渡す追加属性。 Attribute undefined
Type undefined | { [key: string]: any; }
Default undefined
Description アラートに表示するInputの配列。 Attribute undefined
Type AlertInput[]
Default []
Description true
の場合、アラートは開く。もし false
ならば、アラートは閉じます。alertControllerやtrigger
プロパティを使用してください。注意: アラートが終了しても isOpen
は自動的に false
に戻りません。あなたのコードでそれを行う必要があります。Attribute is-open
Type boolean
Default false
Description true
の場合、オーバーレイが表示されたときにキーボードが自動的に解除されます。Attribute keyboard-close
Type boolean
Default true
Description アラートが解除されたときに使用するアニメーション。 Attribute undefined
Type ((baseEl: any, opts?: any) => Animation) | undefined
Default undefined
Description アラートに表示されるメインメッセージ。message
には、文字列としてプレーンテキストまたはHTMLのいずれかを指定することができます。通常HTML用に予約されている文字を表示するには、エスケープする必要があります。例えば、<Ionic>
は <Ionic>
になります:セキュリティ・ドキュメント このプロパティは、カスタムHTMLを文字列として受け付けます。デフォルトでは、コンテンツはプレーンテキストとしてパースされます。カスタムHTMLを使用するには、Ionicの設定で innerHTMLTemplatesEnabled
を true
に設定する必要があります。 Attribute message
Type IonicSafeString | string | undefined
Default undefined
Description modeは、どのプラットフォームのスタイルを使用するかを決定します。 Attribute mode
Type "ios" | "md"
Default undefined
Description アラートの見出しにあるサブタイトルです。タイトルの下に表示されます。 Attribute sub-header
Type string | undefined
Default undefined
Description true
の場合、アラートは半透明になります。modeが "ios"
で、デバイスが backdrop-filter
をサポートしている場合にのみ適用されます。Attribute translucent
Type boolean
Default false
Description クリックされるとアラートが開くトリガー要素に対応するID。 Attribute trigger
Type string | undefined
Default undefined
Name Description didDismiss
アラートが解除された後に発行されます。ionAlertDidDismissの略記。 didPresent
アラートが提示された後に発行されます。ionAlertWillDismissの略記。 ionAlertDidDismiss
アラートが解除された後に発行されます。 ionAlertDidPresent
アラートが提示された後に発行されます。 ionAlertWillDismiss
アラートが解除される前に発行されます。 ionAlertWillPresent
アラートが提示される前に発行されます。 willDismiss
アラートが解除される前に発行されます。ionAlertWillDismissの略記。 willPresent
アラートが提示される前に発行されます。ionAlertWillPresentの略記。
Description アラートオーバーレイが表示された後、解除します。 Signature dismiss(data?: any, role?: string) => Promise<boolean>
Description アラートが解除されたことを解決するPromiseを返します。 Signature onDidDismiss<T = any>() => Promise<OverlayEventDetail<T>>
Description アラートが解除されるタイミングを解決するPromiseを返します。 Signature onWillDismiss<T = any>() => Promise<OverlayEventDetail<T>>
Description アラートオーバーレイを作成した後に提示します。 Signature present() => Promise<void>
No CSS shadow parts available for this component.
Name Description --backdrop-opacity
背景の不透明度 --background
注意喚起の背景 --height
アラートの高さ --max-height
アラートの最大の高さ --max-width
アラートの最大幅 --min-height
アラートの最小の高さ --min-width
アラートの最小幅 --width
アラートの幅
No slots available for this component.