自定义Tab组件默认打开页签
本文档介绍如何通过URL参数控制Tab组件默认激活的页签。
业 务场景
Tab 组件提供了多页签的布局,支持以下两种默认页签行为:
- 自动记忆:用户在某个页面打开某个Tab页签,当用户再次进入该页面时,会自动导航到上次访问过的页签
- URL控制:在页面跳转时,通过URL参数直接指定要打开的页签
适用场景
- 从列表页跳转到详情页的特定Tab页签
- 外部链接直接打开某个特定页签
- 流程引导用户查看特定内容
- 多入口访问同一页面的不同内容
配置方法
URL参数说明
使用 activeCmps 参数控制页面加载时默认激活的组件:
https://host/xxx?activeCmps=65d614bc-0f2a-4ed1-9493-9e164bd892dd
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| activeCmps | string | 页面加载时默认激活的组件ID,多个组件ID用英文逗号分隔 |
获取组件ID
要使用 activeCmps 参数,需要先获取Tab页签对应的组件ID:
- 进入页面设计器
- 选中Tab组件中的某个页签
- 在右侧属性面板中查看组件ID
- 复制组件ID用于URL参数
使用示例
示例1:打开单个Tab页签
假设有一个用户详情页面,包含"基本信息"、"订单记录"、"操作日志"三个Tab页签,组件ID分别为:
- 基本信息:
65d614bc-0f2a-4ed1-9493-9e164bd892dd - 订单记录:
72e825cd-1a3b-5fe2-85a4-0f275ce903ee - 操作日志:
83f936de-2b4c-6gf3-96b5-1a386df014ff
直接打开"订单记录"页签:
https://example.com/user-detail?activeCmps=72e825cd-1a3b-5fe2-85a4-0f275ce903ee
示例2:打开多个Tab页签
如果页面中有多个Tab组件,可以同时指定多个组件ID:
https://example.com/dashboard?activeCmps=comp-id-1,comp-id-2,comp-id-3
示例3:从列表跳转到详情页特定Tab
在列表页的行按钮中配置跳转链接:
// 在行按钮的自定义动作中
const userId = row._id;
const tabId = "72e825cd-1a3b-5fe2-85a4-0f275ce903ee"; // 订单记录Tab ID
window.location.href = `/user-detail?id=${userId}&activeCmps=${tabId}`;
示例4:动态生成跳转链接
在脚本中动态生成带有Tab参数的URL:
public object Execute(ComponentContext context, ChameleonSDK sdk)
{
var list = context.Request.List;
var first = list.FirstOrDefault();
if (first == null)
return null;
var userId = first._id;
var tabId = "72e825cd-1a3b-5fe2-85a4-0f275ce903ee";
// 设置跳转URL
context.DicParam["RedirectUrl"] = $"/user-detail?id={userId}&activeCmps={tabId}";
return null;
}
工作原 理
优先级规则
Tab 组件的默认页签选择遵循以下优先级:
- URL参数优先:如果URL中包含
activeCmps参数,优先使用URL指定的页签 - 用户记忆次之:如果URL中没有参数,使用用户上次访问的页签
- 默认页签最后:如果以上都没有,使用Tab组件配置的默认页签
参数解析
系统在页面加载时会:
- 解析URL中的
activeCmps参数 - 查找对应的组件
- 激活指定的Tab页签
- 滚动到组件可见区域
注意事项
- 组件ID准确性:确保URL参数中的组件ID正确且存在
- 多个组件:多个组件ID用英文逗号分隔,不要有空格
- URL编码:如果组件ID包含特殊字符,需要进行URL编码
- 页面刷新:页面刷新后,如果URL参数仍然存在,会继续使用URL指定的页签
- 用户记忆:使用URL参数不会覆盖 用户的页签记忆,下次不带参数访问时仍会使用记忆的页签
常见问题
Q: 如何获取Tab页签的组件ID?
A: 在页面设计器中选中Tab页签,在右侧属性面板中可以查看和复制组件ID。
Q: 可以同时激活多个Tab组件的页签吗?
A: 可以,在 activeCmps 参数中用逗号分隔多个组件ID即可。
Q: URL参数会覆盖用户的页签记忆吗?
A: 不会。URL参数只在当前访问时生效,不会修改用户的页签记忆。下次不带参数访问时,仍会使用用户上次访问的页签。
Q: 如果指定的组件ID不存在会怎样?
A: 系统会忽略不存在的组件ID,使用用户记忆或默认页签。
Q: 可以在其他组件上使用 activeCmps 参数吗?
A: activeCmps 参数主要用于Tab组件,但也可以用于其他需要激活状态的组件。