Skip to Content
🎉 Univer 0.8.3 版本已发布。查看详情 →

在 Vue 中集成 Univer

Vue 3+

集成前须知

  1. Univer 完全支持 Vue,你可以在 Vue 中使用 Univer 的所有功能。
  2. 应避免对 Univer 和 UniverAPI 的实例进行代理,否则可能会引起不可预知的错误或性能问题。

集成步骤

  1. onMounted 钩子中初始化 Univer
  2. onBeforeUnmount 钩子中销毁 Univer

示例代码

<template> <div ref="container"></div> </template> <script lang="ts" setup> import { onMounted, onBeforeUnmount, ref } from 'vue' import { createUniver, defaultTheme, FUniver, LocaleType, merge, Univer } 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 container = ref<HTMLElement | null>(null) let univerInstance: Univer | null = null let univerAPIInstance: FUniver | null = null onMounted(() => { const { univer, univerAPI } = createUniver({ locale: LocaleType.ZH_CN, locales: { [LocaleType.ZH_CN]: merge( {}, UniverPresetSheetsCoreZhCN ), }, theme: defaultTheme, presets: [ UniverSheetsCorePreset({ container: container.value as HTMLElement, }), ], }) univerAPI.createWorkbook({ name: 'Test Sheet' }) univerInstance = univer univerAPIInstance = univerAPI }) onBeforeUnmount(() => { univerInstance?.dispose() univerAPIInstance?.dispose() univerInstance = null univerAPIInstance = null }) </script>

Vue 2.x

集成前须知

  1. 通常 Univer 会在 Vue 2.x 中正常工作,但是 Univer 的 ComponentManager 并不支持 Vue 2.x,因此你将无法将基于 Vue 2.x 编写的组件注册为 Univer 的自定义组件。
  2. 使用 pnpm 安装 @univerjs/presets 时,可能会出现需要手动安装 react 和 react-dom 的情况。
  3. 如果在开发环境中遇到了 ResizeObserver loop limit exceeded 警告,可以忽略它,也可以参考下面的代码片段解决:
if (process.env.NODE_ENV === 'development') { const _ResizeObserver = window.ResizeObserver; function debounce(fn, delay) { let timer = null; return function() { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { fn.apply(this, arguments); }, delay); }; } window.ResizeObserver = class ResizeObserver extends _ResizeObserver{ constructor(callback) { callback = debounce(callback, 50); super(callback) } } }

集成步骤

  1. mounted 钩子中初始化 Univer
  2. beforeDestroy 钩子中销毁 Univer

示例代码

<template> <div ref="container"></div> </template> <script> 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'; export default { data() { return { }; }, mounted() { const { univer, univerAPI } = createUniver({ locale: LocaleType.ZH_CN, locales: { [LocaleType.ZH_CN]: merge( {}, UniverPresetSheetsCoreZhCN, ), }, theme: defaultTheme, presets: [ UniverSheetsCorePreset({ container: this.$refs.container, }), ], }); univerAPI.createWorkbook({ name: 'Test Sheet' }); this.univerInstance = univer; this.univerAPIInstance = univerAPI; }, beforeDestroy() { this.univerInstance?.dispose(); this.univerAPIInstance?.dispose(); this.univerInstance = null; this.univerAPIInstance = null; }, } </script>
Last updated on