Modal 组件是一个多功能的弹出式 UI 元素,它从屏幕底部向上滑动显示内容,允许用户在不离开当前页面的情况下与之交互。本文档将解释 Modal 组件在 Ionic Framework 中的工作原理,包括其架构、API 以及类似 Sheet Modals 的专业功能。有关其他弹出式组件的信息,请参阅弹出式组件页面 2.4。
Modal 是 Ionic Framework 的几种弹出式组件之一。它提供了一种展示需要用户关注或交互的临时 UI 元素的方式,然后再返回到主应用程序流程。
来源:core/src/components/modal/modal.tsx59-66 core/src/utils/overlays.ts56-69
Modal 组件是 Ionic 弹出式系统的一部分,该系统包含几个显示在主内容之上的 UI 组件。
来源:core/src/components/modal/modal.tsx67-130 core/src/utils/overlays.ts56-69
可以通过 `modalController` 创建 Modals,或者将 `ion-modal` 组件直接放在 HTML 中。控制器方式更适合以编程方式创建和管理。
来源:core/src/utils/overlays.ts60-69 core/src/utils/overlays.ts502-566 core/src/components/modal/modal.tsx511-566
Modal 组件支持不同的展示样式
覆盖整个屏幕,内容可自定义。这是默认的 Modal 类型。
一种看起来像卡片的 Modal,带有圆角,不覆盖全屏。在 iOS 上可用。
一种可以在屏幕上部分显示的 Modal,用户可以配置高度断点,允许在不同位置之间拖动。
来源:core/src/components/modal/modal.tsx131-182
| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
isOpen | 布尔值 | false | 控制 Modal 是否打开 |
animated | 布尔值 | true | Modal 是否应进行动画 |
backdropDismiss | 布尔值 | true | 点击背景是否关闭 Modal |
showBackdrop | 布尔值 | true | 是否显示背景 |
enterAnimation | AnimationBuilder | - | Modal 进入时的自定义动画 |
leaveAnimation | AnimationBuilder | - | Modal 离开时的自定义动画 |
keyboardClose | 布尔值 | true | Modal 关闭时键盘是否应被关闭 |
canDismiss | boolean | function | true | Modal 是否可以关闭 |
来源:core/src/components/modal/modal.tsx99-305
| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
breakpoints | number[] | - | 断点值数组,范围为 0-1 |
initialBreakpoint | 数字 | - | Modal 呈现时的初始断点 |
backdropBreakpoint | 数字 | 0 | 背景出现时的断点 |
handle | 布尔值 | - | 是否显示可拖动的把手 |
handleBehavior | 字符串 | 'none' | 按下把手时的行为 |
expandToScroll | 布尔值 | true | 滚动时是否展开 Modal |
来源:core/src/components/modal/modal.tsx131-182
Modal 组件提供了几种方法和事件来管理其生命周期
| 方法 | 描述 |
|---|---|
present() | 在屏幕上显示 Modal |
dismiss(data?, role?) | 使用可选的数据和角色关闭 Modal |
onDidDismiss() | 返回一个在 Modal 关闭后解析的 Promise |
onWillDismiss() | 返回一个在 Modal 即将关闭时解析的 Promise |
setCurrentBreakpoint(breakpoint) | 对于 Sheet Modals:移动到指定的断点 |
getCurrentBreakpoint() | 对于 Sheet Modals:返回当前断点 |
| 事件 | 描述 |
|---|---|
ionModalDidPresent | Modal 呈现后触发 |
ionModalWillPresent | Modal 呈现前触发 |
ionModalWillDismiss | Modal 关闭前触发 |
ionModalDidDismiss | Modal 关闭后触发 |
ionBreakpointDidChange | Modal 断点更改后触发 |
来源:core/src/components/modal/modal.tsx310-354 core/src/components/modal/modal.tsx511-884
当 Modal 呈现时,会发生以下步骤
来源:core/src/components/modal/modal.tsx511-622
Modal 关闭时
来源:core/src/components/modal/modal.tsx750-825 core/src/utils/overlays.ts635-734
Sheet modal 是一种特殊的 modal,可以在屏幕上部分显示,并在预定义的(断点)位置之间拖动。
来源:core/src/components/modal/modal.tsx678-738 core/src/components/modal/modal.tsx847-909
Modal 组件实现了焦点捕获,以确保键盘导航保持在 Modal 内部,以提高可访问性。
来源:core/src/utils/overlays.ts172-361 core/src/utils/overlays.ts488-501
Modal 控制器提供了一种以编程方式创建和管理 Modals 的方法。
来源:core/src/utils/overlays.ts42-69 core/src/utils/overlays.ts415-464
Modal 组件与框架代理集成,以便正确处理不同框架(如 Angular、React 和 Vue)中的组件生命周期。
来源:core/src/components/modal/modal.tsx469-491 core/src/utils/overlays.ts830-906
以下是一些 Modal 组件的常见用法模式
来源: core/src/components/modal/modal.tsx511-566 core/src/components/modal/modal.tsx750-825
Modal 组件是 Ionic Framework 中一个强大且灵活的叠加 UI 元素。它提供了各种展示样式(标准、卡片式和抽屉式)以及丰富的 API 以供程序化控制。该组件与框架委托无缝集成,确保了在不同 JavaScript 框架之间的正确生命周期管理。抽屉式 Modal 的特殊功能,例如可自定义的断点和滑动手势,增强了用户体验,而焦点管理和可访问性方面的考虑则使所有用户都能方便地使用 Modal。
了解 Modal 组件的架构、API 和实现细节,可以帮助开发人员在他们的 Ionic 应用程序中创建有效且易于访问的叠加交互。