Skip to main content

容器

容器用来组织子组件。编辑器里有三种常用容器:

名称排列方式常见用途
纵列从上到下排列标题 + 内容 + 底部说明
横排从左到右排列图标 + 文本、左右两端对齐
层叠子组件互相叠放背景图上放文字、角标

用法

在编辑器底部点加号,添加 纵列横排层叠,再把子组件拖进去。子组件在树面板里的顺序就是显示顺序;层叠里后面的子组件会盖在前面的子组件上。

属性

字段可填写说明
数据源(循环){rows[row]}按数组重复渲染子组件
打开链接https://... / OmniWidgets://... / ${row.url}点击整个容器时打开链接或应用
内间距0 / 8纵列、横排的子组件间距;层叠没有这个字段
水平对齐start / center / end纵列中子组件的横向位置
垂直分布start / center / spaceBetween纵列中子组件的纵向分布
垂直对齐top / center / bottom横排中子组件的纵向位置
水平分布start / center / spaceBetween横排中子组件的横向分布
对齐topStart / center / bottomEnd层叠中子组件的对齐位置
宽 / 高auto / 100 / 100% / ${w}容器尺寸
水平偏移 / 垂直偏移 / Z 轴偏移0 / 8 / ${x}只移动显示位置,不改变原本占位
内边距 / 外边距8 / 8,8,8,8四周留白
显示true / false / ${show}控制是否显示
背景色#FFFFFF / ${color}容器背景
圆角0 / 8 / 50%背景圆角
旋转角度0 / 15 / ${angle}顺时针旋转角度
不透明度011 为完全不透明

打开链接

纵列、横排、层叠都可以设置「打开链接」。用户点击容器时,Omni 会打开对应链接:

https://example.com/detail
OmniWidgets://open-app/com.example.targetapp?ability=EntryAbility
OmniWidgets://open-app/com.example.targetapp?ability=EntryAbility&module=entry
${row.url}
OmniWidgets://open-app/com.huawei.hmos.clock?ability=com.huawei.hmos.clock.phone
hww://www.huawei.com
OmniWidgets://open-app/com.huawei.hmos.calendar?ability=MainAbility

把上面这类值填到「打开链接」字段即可。

OmniWidgets://open-app/包名?ability=... 会打开已安装应用的指定入口。如果目标应用需要模块名,再加 &module=...。目标应用未安装或系统不允许跳转时不会打开。旧版 app://包名 仍可兼容,但新卡片建议使用带 abilityOmniWidgets://open-app/

如果需要点击后执行脚本、写入配置、刷新数据或按条件决定跳转,使用 按钮 的「点击」字段。

循环

在「数据源(循环)」填 {rows[row]},容器的子组件会按数组重复显示。每条数据都会得到一个临时名称,例如这里的 row

JS:

let rows = [
{ title: "苹果", price: 5 },
{ title: "香蕉", price: 3 },
{ title: "橘子", price: 4 },
]

容器配置:

位置字段填写
外层纵列数据源(循环){rows[row]}
子组件 1 文本内容${row.title}
子组件 2 文本内容¥${row.price}

显示结果:

苹果   ¥5
香蕉 ¥3
橘子 ¥4

嵌套循环也支持。外层用 row,内层用 cell:

外层纵列
数据源(循环): {rows[row]}
里面放一个横排
数据源(循环): {row.cells[cell]}
里面放文本: ${cell.text}

例:按值高亮背景

JS:

let rows = [
{ title: "A", score: 95, color: "#34C759" },
{ title: "B", score: 60, color: "#FF9500" },
{ title: "C", score: 30, color: "#FF3B30" },
]
位置字段填写
外层纵列数据源(循环){rows[row]}
子组件横排背景色${row.color}
横排里的文本内容${row.title} ${row.score}

注意事项

单次循环上限 50

渲染端最多展开 50 条,超出会被截掉。接口数据很多时,建议在 JS 里先 arr.slice(0, 50)

数组没准备好会显示为空

JS 还没返回数据,或「数据源(循环)」路径写错时,容器不会展开子组件。

容器只负责链接跳转

「打开链接」不会执行脚本。想点击后改状态,把内容放进按钮里。