示例:应用上下文页面
LIVE CANVAS可运行组件示例
ON-DEMAND RUNTIME交互式示例将在进入视区时启动避免文档首屏同时初始化多个 Canvas Runtime
import { createAppContext, createAppContextKey } from 'ds-ui'
应用上下文页面展示如何在应用、页面、弹窗之间传递共享对象。上下文适合放服务、当前页面参数、局部业务状态和可释放资源。
基本思路
应用上下文
登录用户
权限服务
字典服务
页面上下文
当前业务对象
页面参数
页面级服务
弹窗上下文
弹窗参数
临时草稿
上下文按树向上查找。越局部的对象越应该放在越靠近使用者的上下文中。
最小示例
const currentRecordKey = createAppContextKey<{ id: string; title: string }>('currentRecord') const pageContext = createAppContext()pageContext.set(currentRecordKey, { id: 'record-001', title: '入院记录' }) const currentRecord = pageContext.require(currentRecordKey)currentRecord.title
页面注入
页面打开时可以创建页面上下文,并注入页面参数:
open page
create page context
set current object
set page service
render page
页面关闭时释放页面上下文。通过可释放方式注册的对象会一并释放。
弹窗继承
由页面打开的弹窗应继承页面上下文,并覆盖或追加弹窗参数。这样弹窗可以读取当前业务对象,也能在关闭时释放自己的临时对象。
如果弹窗是全局工具,不应该依赖页面上下文。
常见错误
- 把当前患者、当前文档等页面对象放成全局。
- 弹窗从全局读状态,导致多 tab 时读错对象。
- 页面关闭后没有释放上下文,导致服务和缓存残留。
- 上下文中塞入过大的文档数据,增加内存压力。
调试建议
开发期间可以用对象查看器查看上下文内容。上下文 key 应使用清晰命名,方便定位来源和生命周期。