菜单

Item and List Components (条目和列表组件)

相关源文件

本文档介绍了 Item 组件及其变体,用于在 Ionic Framework 中创建列表和内容容器。Item 组件是构建跨移动和 Web 应用程序的交互式列表界面以及移动和 Web 应用程序的基础构建块。

有关通常与列表配合使用的 Refresher 组件的信息,请参阅 Refresher Component

概述

Ionic 中的 Item 组件是多功能的容器,用于以结构化的格式显示内容和启用用户交互。它们是创建具有跨平台一致样式和行为的列表、表单和导航元素的元素。

来源: core/src/components/item/item.tsx23-31

组件架构

Ion Item 组件是 Ionic UI 系统中的基础构建块,使用 Stencil 作为 Web 组件实现。根据其配置,它可以呈现多种形式。

来源: core/src/components/item/item.tsx31-383

核心属性

Item 组件支持许多属性来决定其行为和外观

属性类型描述
color颜色设置应用主题的颜色
button布尔值使 Item 能够通过 button 标签进行点击
detail布尔值显示详细信息箭头(chevron)
detailIcon字符串自定义详细信息箭头图标
disabled布尔值禁用用户交互
download字符串用于可下载链接(带有 href)
href字符串用于导航的 URL(渲染为 anchor)
lines`'full'``'inset'`
routerDirectionRouterDirection使用路由器的导航方向
类型`'submit'``'reset'`

来源: core/src/components/item/item.tsx41-116

Item 结构和插槽

Item 组件提供了一个灵活的结构,带有命名插槽用于内容组织

该组件的 DOM 结构在不同的设备和方向上提供了统一的定位

  1. start 插槽:位于 Item 开头的内容(在 LTR 语言中位于左侧)
  2. default 插槽:主内容区域
  3. end 插槽:位于 Item 末端的内容(在 LTR 语言中位于右侧)
  4. detail-icon 部分:当 detail 属性为 true 时显示的 Chevron 图标

来源: core/src/components/item/item.tsx16-22 core/src/components/item/item.tsx361-377

交互行为

Ion Item 根据其配置和内容实现各种交互行为

交互行为会根据 Item 的内容进行调整

  1. 单一交互元素:整个 Item 变得可点击,并聚焦/激活其中的元素
  2. 多个交互元素:每个元素处理自己的交互,以防止冲突
  3. 链接/按钮模式:点击时导航(使用 href 或 button 属性)

来源: core/src/components/item/item.tsx178-201 core/src/components/item/item.tsx274-315

Item 变体

按钮和链接 Item

当 Item 配置为 button="true" 或带有 href 属性时,Item 将作为交互式元素

该组件会根据这些属性自动渲染相应的元素(按钮或链接)。

来源: core/src/components/item/item.tsx49-51 core/src/components/item/item.tsx77-81

详细信息指示器

Items 可以显示一个详细信息指示器(通常是 chevron 图标),以表明点击会显示更多信息

在 iOS 模式下,当 Item 可点击(具有 button 或 href)时,会自动添加详细信息指示器。

来源: core/src/components/item/item.tsx56-62 core/src/components/item/item.tsx317-376

线条样式

lines 属性控制项目之间的边框外观

此属性有助于构建列表中的视觉层次结构。

来源: core/src/components/item/item.tsx92-93 core/src/components/item/item.tsx340-341

使用表单输入

Item 组件能很好地处理表单输入和交互元素

组件会自动检测输入元素并调整其行为

  1. 当只有一个输入(例如复选框)时,整个 Item 都是可点击的
  2. 当有多个输入时,每个输入都会处理自己的交互
  3. 对于文本输入与其它交互元素,提供了特殊处理

来源: core/src/components/item/item.tsx182-201 core/src/components/item/item.tsx298-310

在列表中使用 Item

Items 通常在列表容器中使用,以创建结构化内容

当 Item 在 ion-list 中使用时,Item 将获得适当的 ARIA role="listitem" 以实现可访问性。

来源: core/src/components/item/item.tsx322-323 core/src/components/item/item.tsx351-352

样式和主题

Item 组件通过 color 属性和 CSS 自定义属性支持 Ionic 的主题系统

该组件会自动应用适当的特定于模式的样式(iOS 或 Material Design)。

来源: core/src/components/item/item.tsx41-46 core/src/utils/theme.ts11-19

实现说明

交互元素检测

Item 组件对交互元素有复杂的处理

  1. 它识别潜在的交互元素

    • 复选框、日期时间选择、选择、单选(需要输入覆盖)
    • 输入、范围、搜索栏、分段控件、文本区域、切换(可以一起聚焦)
    • 路由器链接、按钮、锚点(应保持单独可点击)
  2. 基于检测到的元素,它会调整其交互模型,以避免与单独的元素交互冲突。

来源: core/src/components/item/item.tsx182-201 core/src/components/item/item.tsx235-239

事件传播

当 Item 包含交互元素时,它会管理事件传播以确保正确的行为

  1. 对于只有一个输入项的 Item,点击 Item 会委托给输入项
  2. 对于文本输入项(ion-input、ion-textarea),点击会聚焦输入字段
  3. 对于其他交互元素,如切换开关,点击会触发该元素的点击处理程序

来源: core/src/components/item/item.tsx274-315

最佳实践

  1. 使用适当的插槽:将图标、头像和徽章放在 start/end 插槽中,以实现统一的布局
  2. 表单输入:将表单控件包裹在 Item 中,以保持一致的样式和触摸区域
  3. 导航:为导航 Item 使用 hrefbutton 属性
  4. 视觉层次:使用 lines 属性来控制 Item 之间的视觉分隔
  5. 可访问性:在使用带交互元素的 Item 时,确保适当的标签

Item 组件与 Ionic Framework 中的其他组件紧密协作

  • Ion-List:Item 的容器
  • Ion-List-Header:列表中的部分标题
  • Ion-Item-Divider:Item 之间的视觉分隔符
  • Ion-Item-Group:Item 的逻辑分组
  • Ion-Label:Item 内的文本标签
  • Ion-Note:Item 的补充文本

有关列表的下拉刷新功能,请参阅 Refresher Component