ToolJet 实战:在页面加载时读取 URL 参数并按需触发 REST API 查询

发布时间:2026/9/10 22:04:31

ToolJet 实战:在页面加载时读取 URL 参数并按需触发 REST API 查询 ToolJet 实战在页面加载时读取 URL 参数并按需触发 REST API 查询【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet本文以 ToolJet 多页面应用为例讲解如何在页面加载Page Load时读取 URL 参数并根据参数内容按需触发 REST API 查询。你将掌握{{globals.urlparams}}全局对象的使用方法、通过「Switch page」动作或 JavaScript 代码传递参数的两种方式以及一套可复制的「表单提交 → 跨页传参 → 页面加载时自动拉取数据」完整实现方案。URL 参数的作用与添加方式在 ToolJet 多页面应用中URL 参数Query Parameters通常用来在页面之间传递数据例如把用户在Home页输入的表单值带到Dashboard页再结合 REST API 查询按条件加载对应数据。URL 参数会以?keyvalue的形式追加在应用 URL 末尾多个参数用连接例如?emailab.compage2。目前ToolJet 提供两种给页面添加 URL 参数的方式通过事件处理器的Switch page动作Switch Page 动作参考通过JavaScript 代码查询调用actions.switchPage见该文档中「Switch page with query params」一节。只要页面是带着 URL 参数被打开的就可以在任意表达式中通过全局对象{{globals.urlparams}}访问这些参数。该对象以键值对key-value形式保存全部 URL 参数使用{{globals.urlparams.参数名}}即可取出单个参数的值例如{{globals.urlparams.email}}。理解{{globals.urlparams}}全局对象从源码实现看urlparams是 ToolJet 前端在运行时维护的全局对象之一其值来自浏览器地址栏的查询字符串使用queryString.parse解析为键值对对象应用初次加载 / 预览时从location.search解析useAppData.js 中的setResolvedGlobals(urlparams, JSON.parse(JSON.stringify(queryString.parse(location?.search))))页面切换时由 Switch page 动作携带的参数构造appSlice.js 中的setResolvedGlobals(urlparams, JSON.parse(JSON.stringify(queryString.parse(queryParamsString))))。因此无论页面是通过点击事件跳转还是直接以带参 URL 打开{{globals.urlparams}}都能拿到最新的一批参数。在编辑器的 Inspector左侧边栏中展开globals → URL Params即可实时查看当前页面持有的 URL 参数键值对。方式一通过 Switch Page 动作传递 URL 参数在事件处理器Event Handler中配置 Switch page 动作时除了选择目标页面还可以为跳转追加 URL 参数。配置面板的源码位于 SwitchPage.jsx其核心交互为参数以[key, value]键值对形式组织key 与 value 各自是一个 CodeHinter 输入框value 支持写表达式如{{globals.currentUser.email}}点击Add param 按钮可继续添加参数对支持一次携带多个参数每个参数对可单独删除。事件真正触发时前端会先对每个 key/value 做表达式解析getResolvedValue并把当前 URL 中已有的version、env等参数自动合并进新 URL避免环境信息丢失见 eventsSlice.js随后调用底层switchPage(pageId, handle, queryParams, moduleId)appSlice.js完成页面切换与 URL 拼接?key1value1key2value2。方式二通过 JavaScript 代码传递 URL 参数除了事件配置还可以在 RunJS 查询中用一行代码触发带参跳转actions.switchPage(pageHandle, [[param1, value1], [param2, value2]])其中第一个参数是目标页面的 handle页面标识第二个参数是[key, value]组成的二维数组。actions.switchPage属于 ToolJet 暴露给脚本的全局动作 API 之一从 scriptAnalysis.ts 可以看到runQuery等动作同样以actions.fn(queryName)的形式在脚本中识别与执行。完整实战页面加载时使用 URL 参数触发 REST API 查询下面从零搭建一个双页面示例用户在Home页输入邮箱并点击提交跳转到Dashboard页Dashboard页在加载完成时检查 URL 中是否带有email参数有则自动运行两个 REST API 查询并把结果渲染到表格中。第一步创建 Home 与 Dashboard 页面新建应用后默认会有一个Home页面。在左侧边栏的Pages菜单中点击新建页面命名为Dashboard得到两个页面第二步在 Home 页面搭建表单并配置跳转事件向Home页面添加一个Form 组件内含一个文本输入框和一个按钮将文本输入框命名为email用于录入邮箱将按钮命名为Submit用于触发跳转。选中按钮添加事件On click动作选择Switch page目标页面选择Dashboard然后添加一条 URL 参数key 填emailvalue 填{{components.form1.data.textinput1.value}}。这样点击按钮时输入框中的值会被解析为字符串并拼进跳转 URL第三步在 Dashboard 页面创建 REST API 查询为Dashboard页新建两个 REST API 查询用于模拟「按 URL 参数触发后加载」的数据源查询 1products商品列表新建 REST API 查询命名为products请求 URL 填写https://fakestoreapi.com/productsmock 接口运行查询并检查预览数据打开table1的属性面板将表数据Table Data绑定为{{queries.products.data}}。查询 2users用户详情新建 REST API 查询命名为users请求 URL 填写https://jsonplaceholder.typicode.com/usersmock 接口运行查询并检查预览数据将table2的表数据绑定为{{queries.users.data}}。这样两张表格的数据都来自查询结果后续只需触发查询即可刷新表格。第四步编写 JavaScript 查询读取 URL 参数并触发查询新建一个 JavaScript 代码查询命名为urlparams。它负责「等待 URL 参数就绪 → 检查是否存在email→ 依次运行products与users查询」function waitForURLParams(timeout) { // Wait for URL parameters to be available const check resolve { // Check if URL parameters are available if (location.search.length 0) resolve(); // URL parameters are available else setTimeout(_ check(resolve), timeout); // Check again after a timeout } return new Promise(check); // Return a promise that resolves when URL parameters are available } async function checkAndRunQuery(timeout) { // Check if URL parameters are available and run the REST API queries await waitForURLParams(timeout); // Wait for URL parameters to be available const urlParams new URLSearchParams(window.location.search); // Get URL parameters if (urlParams.get(email)) { // Check if email parameter is present in the URL await actions.runQuery(products); // Run the REST API query to get products await actions.runQuery(users); // Run the REST API query to get user details } else { alert(URL param not found); // Alert if email parameter is not present in the URL } } checkAndRunQuery(5000); // Check if URL parameters are available and run the REST API queries after a timeout of 5 seconds逐段拆解这段脚本的职责waitForURLParams(timeout)以轮询方式等待浏览器地址栏出现查询字符串location.search.length 0返回一个 Promise。这是为了保证在页面事件触发的时序下URL 参数已经写入地址栏再执行后续逻辑checkAndRunQuery(timeout)等待参数就绪后用原生URLSearchParams解析window.location.search判断是否存在email参数actions.runQuery(products)/actions.runQuery(users)按名称触发已定义好的 REST API 查询await确保按顺序执行若 URL 中没有email参数则弹出alert(URL param not found)提示末尾调用checkAndRunQuery(5000)启动检查流程超时步长为 5 秒。第五步配置 Dashboard 页面级 On page load 事件回到左侧边栏的Pages菜单打开Dashboard页面的菜单选择添加事件处理器Event handler事件类型选择On page load页面加载时动作选择Run query查询选择urlparams。这样每当Dashboard页面被加载都会自动执行urlparams查询从而走完「检查 URL 参数 → 触发 REST API 查询 → 表格渲染数据」的完整链路。第六步运行效果与验证在Home页输入邮箱并点击Submit页面通过 Switch page 动作跳转到Dashboard地址栏出现?email输入的值Dashboard的On page load事件触发urlparams查询脚本轮询到 URL 参数存在检测到email后依次运行products、userstable1与table2分别展示商品与用户数据。如需人工核对参数可在左侧边栏打开Inspector展开globals → URL Params即可看到当前页面持有的键值对原理剖析与注意事项为什么需要waitForURLParams轮询页面级On page load事件的触发时机可能早于地址栏查询字符串完全写入直接读取window.location.search可能拿到空串。用「延时 轮询」把检查挂到 Promise 上可以稳定等到参数就绪本例超时步长 5000ms。globals.urlparams的两种数据来源。直接以带参 URL 打开应用时由 useAppData.js 从location.search解析由 Switch page 动作跳转时由 appSlice.js 依据动作携带的参数对构造并写入。两条路径最终都会同步到{{globals.urlparams}}。环境参数自动保留。切换页面时前端会检查当前 URL 中的version、env等参数并自动合并进新 URLeventsSlice.js因此按上文方式跳转不会丢失应用的版本与环境上下文。边界情况。如果 URL 中缺少email参数示例脚本会弹出提示而不是继续执行查询这正好演示了「按参数条件化执行」的思路——你可以把alert替换为跳转到默认页、展示空状态等任意兜底逻辑。参数值的动态化。Switch page 的 value 输入框支持表达式除了绑定组件值如{{components.form1.data.textinput1.value}}也可以使用全局变量或当前用户信息如{{globals.currentUser.email}}适用于登录态透传等场景多个参数可通过「Add param」继续追加。小结通过{{globals.urlparams}} 页面级On page load事件 RunJS 脚本中的actions.runQuery即可在 ToolJet 中实现「跨页传参、按需加载」的完整模式。这套方案不需要后端参与纯前端即可完成参数校验、查询触发与数据渲染可复用于权限透传、筛选条件传递、详情页数据预加载等常见内部工具场景。进一步了解 Switch page 动作的参数配置与 RunJS 触发方式可参阅 Switch Page 动作参考。【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/10 22:04:31

CANN/GE模型异步执行接口

aclmdlExecuteAsync 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Tensor…

2026/9/10 22:04:31

Authelia 提交信息规范(Commit Message Guidelines)完全指南

Authelia 提交信息规范(Commit Message Guidelines)完全指南 【免费下载链接】authelia The Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready. 项目地址: https://gitcode.com/GitHub_Tren…

2026/9/10 22:04:31

十钨酸盐-钯协同催化C-H键直接官能团化研究

1. 研究背景与核心突破在有机合成化学领域,C-H键的直接官能团化一直被视为"圣杯反应"。传统方法通常需要预先对底物进行活化或引入导向基团,这不仅增加了合成步骤,也限制了底物的适用范围。十钨酸盐与钯协同催化体系的出现&#xf…

2026/9/10 22:49:36

AI领域最新突破:多模态模型与边缘芯片技术解析

1. 项目概述上周AI领域的发展速度令人咋舌,作为一名长期跟踪技术趋势的从业者,我每天至少要花2小时梳理各平台资讯。3月18日至3月23日这短短几天里,从底层框架到应用落地都出现了突破性进展。最让我兴奋的是,这些进展不再是实验室…

2026/9/10 22:49:36

MATLAB实现光学薄膜TMM仿真:原理与优化技巧

1. 项目概述:TMM方法在光学薄膜仿真中的应用传输矩阵法(Transfer Matrix Method, TMM)是计算分层介质光学特性的经典数值方法,特别适合分析光学薄膜和一维光子晶体的透射/反射特性。这个方法通过将整个多层结构分解为多个界面和均…

2026/9/10 22:49:36

双层MPC微网能量管理:储能建模、MATLAB实现与调参排错全攻略

做微网能量管理最让我崩溃的一次经历,发生在实验室里跑双层MPC模型的第一周。上层经济调度算得清清楚楚,下层MPC也顺滑地跑了滚动循环,结果电池SOC直接掉到0.05,系统在第七个采样时刻就警告电压失稳。后来发现问题根本不在MPC参数…

2026/9/10 22:49:36

Go语言数据统计分析框架选型与优化指南

1. Go语言数据统计分析框架概述在数据处理领域,Go语言凭借其出色的并发性能和简洁的语法设计,正在成为数据统计分析的新兴选择。作为一名长期使用Go进行数据处理开发的工程师,我发现Go生态中已经形成了几个具有明显特色的统计分析框架体系&am…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码