Facade API 参考
简介
为了应对复杂的需求,Univer 的架构也较为复杂,这可能会给使用造成一些困难,为此我们提供了一个更加简单易用的面板 API(Facade API)。为了帮助社区更好的理解
Facade API
, 本文档是专属的Facade API
参考文档, 包含了Univer SDK(OSS + Pro)
及Univer Go
的Facade API
。
安装
开发者可以使用 Presets
安装或者手动组合安装。
使用 Presets
安装
如果你使用 Presets,它会自动引入所含功能的 Facade API,并在你创建 Univer 实例时返回一个对应的 Facade API 实例 univerAPI,直接使用即可。
npm install @univerjs/presets
以下是一个示例如何获取 Facade API
实例:
import { createUniver, defaultTheme, LocaleType, merge } from '@univerjs/presets'
import { UniverSheetsCorePreset } from '@univerjs/presets/preset-sheets-core'
import UniverPresetSheetsCoreZhCN from '@univerjs/presets/preset-sheets-core/locales/zh-CN'
import '@univerjs/presets/lib/styles/preset-sheets-core.css'
const { univer, univerAPI } = createUniver({
locale: LocaleType.ZH_CN,
locales: {
[LocaleType.ZH_CN]: merge(
{},
UniverPresetSheetsCoreZhCN,
),
},
theme: defaultTheme,
presets: [
UniverSheetsCorePreset({
container: 'app',
}),
],
})
univerAPI.createUniverSheet({ name: 'Test Sheet' })
使用手动组合安装
Facade API 的实现被分散到各个插件中,并挂载到全局的 Facade API 根对象上,这意味着对于那些提供了 Facade API 的插件,你需要引入他们对应的 Facade API 实现。
我们会在每个功能的页面介绍它是否提供了 Facade API 实现,你需要按照你实际使用的功能来引入它们对应的 Facade API:
引入
import '@univerjs/sheets/facade'
import '@univerjs/ui/facade'
import '@univerjs/docs-ui/facade'
import '@univerjs/sheets-ui/facade'
import '@univerjs/sheets-data-validation/facade'
import '@univerjs/engine-formula/facade'
import '@univerjs/sheets-filter/facade'
import '@univerjs/sheets-formula/facade'
import '@univerjs/sheets-numfmt/facade'
import '@univerjs/sheets-hyper-link-ui/facade'
引入高级功能的 Facade API 的方式现在与引入开源功能的方式相同,例如:
import '@univerjs-pro/sheets-pivot/facade'
import '@univerjs-pro/exchange-client/facade'
使用
Facade API 是对 Univer 实例的封装,因此你需要在创建了 Univer 实例之后,再用 FUniver 包裹这个实例:
import { FUniver } from '@univerjs/core'
const univerAPI = FUniver.newAPI(univer)
Facade API
使用指南
Facade API
提供了创建实例、枚举、事件以及复杂功能的 builder。以下是一份功能列表
类 | 对应功能 | 包 |
---|---|---|
FUniver | Univer | @univerjs/core |
FChart | 图表 | @univerjs-pro/sheets-chart |
FBlob | 数据流 | @univerjs/core |
FCollaboration | 协同 | @univerjs-pro/collaboration-client |
FDataValidation | 数据验证 | @univerjs/sheets-data-validation |
FDefinedName | 自定义公式 | @univerjs/sheets |
FDocument | 文档 | @univerjs/docs-ui |
FFilter | 筛选 | @univerjs/sheets-filter |
FFormula | 公式 | @univerjs/engine-formula |
FMenu & FSubmenu | 菜单 | @univerjs/ui |
FNetwork | 网络 | @univerjs/network |
FPermission | 权限 | @univerjs/sheets |
FOverGridImage | 图片 | @univerjs/sheets-drawing-ui |
FPivotTable | 透视表 | @univerjs-pro/sheets-pivot |
FRange | 区域 | @univerjs/sheets |
FSelection | 选区 | @univerjs/sheets |
FShortcut | 快捷键 | @univerjs/ui |
FSparkline | 迷你图 | @univerjs-pro/sheets-sparkline |
FThreadComment | 批注 | @univerjs/thread-comment |
FWorkbook | 工作簿 | @univerjs/sheets |
FWorksheet | 工作表 | @univerjs/sheets |
枚举 & 接口
开发者可以通过两种方式获取定义的枚举和接口
通过 univerAPI.Enum.XXXX.xxx
来获取
const pivotAverageSubtotalType = univerAPI.Enum.PivotSubtotalTypeEnum.average
univerAPI.addEvent(univerAPI.Event.ActiveSheetChanged, (params) => {
const { workbook, activeSheet } = params
console.log('after active sheet changed', params)
})
通过 import
来导入
import { PivotSubtotalTypeEnum } from '@univerjs-pro/engine-pivot'
所有的事件都暴露在 univerAPI.Event
上, 我们为每个事件定义了参数,开发者可以在本文档上查阅到每个事件对应的参数。
同时我们提供了一系列的 beforeXXX
事件, 在该事件的参数中会包含 cancel
字段, 您可通过设置 该字段为 true 的方式来阻止即将发生的事。
univerAPI.addEvent(univerAPI.Event.BeforeClipboardPaste, (param) => {
const { text, html } = param
console.log('debugger', text, html)
// 取消粘贴行为发生
param.cancel = true
})
Builder
由于部分功能比较复杂并且构建需要的参数会很多,为了化简使用 API
,我们提供了builder来完成这个功能,开发者需要理解builder是调用对应的build 方法并且把返回结果设置到对应的宿主才可以工作的。
// 设置 A1 单元格的数据验证,要求值来自 B1:B10
const range = FRange.create('Sheet1', 'B1:B10')
const rule = FUniver.newDataValidation().requireValueInRange(range).build()
cell.setDataValidation(rule)
在以上的示例中,我们通过 FUniver.newDataValidation()
创建了一个可以 链式调用
数据验证构造器实例,然后调用构造器实例提供的特有方法 requireValueInRange
传入指定验证范围后执行 build
方法返回 setDataValidation
需要的参数。
以下是一个链式调用的示例:
const fWorkbook = univerAPI.getActiveWorkbook()
const fSheet = fWorkbook.getActiveSheet()
const chartBuilder = fSheet.newChart()
const chartInfo = chartBuilder
// 设置数据源范围
.addRange('A1:D6')
// 设置 chart 类型
.setChartType(ChartTypeBits.Column)
// 设置 chart 位置
.setPosition(1, 1, 0, 0)
// 执行构造参数赋值给 chartInfo 变量
.build()
// 插入对应表格
fSheet.insertChart(chartInfo)
目前支持的 builder 有以下: