通用 API

Univer 可用的 Facade API 取决于当前单元类型和已注册的插件。本文介绍 Univer Bases 应用会用到的通用 API。

引入

TypeScript
import { FUniver } from '@univerjs/core/facade'import '@univerjs-pro/bases/facade'import '@univerjs/ui/facade'const univerAPI = FUniver.newAPI(univer)

命令

Univer 中的大多数操作都会注册到命令系统。统一的执行路径为撤销、重做和协同等能力提供了基础。

如需了解设计细节,请阅读 Univer 命令系统

监听命令

使用 Event.BeforeCommandExecute 在命令执行前运行逻辑,使用 Event.CommandExecuted 在命令执行后运行逻辑。

TypeScript
const beforeDisposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, ({ id, params }) => {  console.log('命令执行前:', id, params)})const afterDisposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id, params }) => {  console.log('命令执行后:', id, params)})

如需阻止命令执行,请在 BeforeCommandExecute 监听器中将 event.cancel 设为 true

TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, (event) => {  if (event.id === 'base.command.set-base-name') {    event.cancel = true  }})

监听器会返回 IDisposable,不再需要时应及时销毁。

TypeScript
beforeDisposable.dispose()afterDisposable.dispose()disposable.dispose()

执行命令

如果已经知道命令 ID 和参数,可以通过 FUniver.executeCommand 执行命令。例如,下面的 Bases 命令会重命名当前Base:

TypeScript
const base = univerAPI.getActiveBase()if (base) {  await univerAPI.executeCommand('base.command.set-base-name', {    unitId: base.getId(),    name: '项目笔记',  })}

事件 API

univerAPI.Event 暴露的事件来自 Univer Core 和当前应用已注册的插件。Core 提供通用的命令和单元事件;Bases 插件会补充表格、字段、记录、视图以及其他 Base 变更事件。使用事件前,请先确认提供该事件的插件已经注册。

当前版本可用的事件名称和参数类型请参阅 Facade Events 参考

使用 addEvent 订阅事件,并销毁返回的对象来取消订阅:

TypeScript
const disposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id }) => {  if (id === 'base.command.set-base-name') {    console.log('Base名称已更改')  }})// 不再需要时移除监听器disposable.dispose()

撤销和重做

TypeScript
await univerAPI.undo()await univerAPI.redo()

系统剪贴板

注册 Bases UI 插件后,copypaste 会作用于Base当前的选区和光标位置。

TypeScript
await univerAPI.copy()await univerAPI.paste()

复制和粘贴依赖浏览器原生 Clipboard API。页面未聚焦、调用并非由用户操作触发或没有剪贴板权限时,操作可能失败。详情请参阅 MDN 文档

UI

如需扩展菜单、工具栏和其他 Bases 界面区域,请参阅 Bases UI 组件

WebSocket

如需使用 WebSocket API,请安装 @univerjs/network、注册 UniverNetworkPlugin,并引入它的 Facade 扩展。

TypeScript
import { UniverNetworkPlugin } from '@univerjs/network'import '@univerjs/network/facade'univer.registerPlugin(UniverNetworkPlugin)

之后即可订阅 Socket 事件、发送消息并关闭连接:

TypeScript
const socket = univerAPI.createSocket('wss://example.com/bases')socket.open$.subscribe(() => socket.send('hello'))socket.message$.subscribe((message) => console.log('WebSocket 消息:', message.data))socket.error$.subscribe((error) => console.error('WebSocket 错误:', error))socket.close()

枚举 API

通用枚举类型通过 univerAPI.Enum 暴露:

TypeScript
console.log(univerAPI.Enum.UniverInstanceType.UNIVER_BASE)console.log(univerAPI.Enum.BaseFieldType.Text)

工具方法 API

通用工具方法通过 univerAPI.Util 暴露:

TypeScript
console.log(univerAPI.Util.tools.isString('Univer Bases')) // true

你觉得这篇文档如何?

© 2026 DreamNum Co., Ltd.