DirectSurface UIDirectSurface UI
开始使用
文档/示例项目

示例:应用上下文页面

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 应使用清晰命名,方便定位来源和生命周期。