tmagic-editor/docs/guide/index.html
2025-03-31 12:39:00 +00:00

131 lines
59 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>快速开始 | tmagic-editor</title>
<meta name="description" content="页面可视化平台">
<meta name="generator" content="VitePress v1.6.3">
<link rel="preload stylesheet" href="/tmagic-editor/docs/assets/style.D3lBSx2e.css" as="style">
<link rel="preload stylesheet" href="/tmagic-editor/docs/vp-icons.css" as="style">
<script type="module" src="/tmagic-editor/docs/assets/app.CTxZuwPV.js"></script>
<link rel="preload" href="/tmagic-editor/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/tmagic-editor/docs/assets/chunks/theme.CgftMYhc.js">
<link rel="modulepreload" href="/tmagic-editor/docs/assets/chunks/framework.BCBheFgR.js">
<link rel="modulepreload" href="/tmagic-editor/docs/assets/guide_index.md.BM-Tluo7.lean.js">
<meta name="theme-color" content="#646cff">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="Layout" data-v-6dfe06bb><!--[--><!--]--><!--[--><span tabindex="-1" data-v-ae2ac445></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-ae2ac445>Skip to content</a><!--]--><!----><header class="VPNav" data-v-6dfe06bb data-v-77ceb46e><div class="VPNavBar" data-v-77ceb46e data-v-90d7d232><div class="wrapper" data-v-90d7d232><div class="container" data-v-90d7d232><div class="title" data-v-90d7d232><div class="VPNavBarTitle has-sidebar" data-v-90d7d232 data-v-53247a16><a class="title" href="/tmagic-editor/docs/" data-v-53247a16><!--[--><!--]--><!--[--><img class="VPImage logo" src="./favicon.png" alt data-v-d81a7e16><!--]--><span data-v-53247a16>tmagic-editor</span><!--[--><!--]--></a></div></div><div class="content" data-v-90d7d232><div class="content-body" data-v-90d7d232><!--[--><!--]--><div class="VPNavBarSearch search" data-v-90d7d232><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-90d7d232 data-v-3bf1ab04><span id="main-nav-aria-label" class="visually-hidden" data-v-3bf1ab04> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/tmagic-editor/docs/guide/" tabindex="0" data-v-3bf1ab04 data-v-3536d535><!--[--><span data-v-3536d535>文档</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/api/editor/props.html" tabindex="0" data-v-3bf1ab04 data-v-3536d535><!--[--><span data-v-3536d535>API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/form-config/fields/text.html" tabindex="0" data-v-3bf1ab04 data-v-3536d535><!--[--><span data-v-3536d535>表单配置</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://github.com/Tencent/tmagic-editor/releases" target="_blank" rel="noreferrer" tabindex="0" data-v-3bf1ab04 data-v-3536d535><!--[--><span data-v-3536d535>更新日志</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://tencent.github.io/tmagic-editor/playground/index.html" target="_blank" rel="noreferrer" tabindex="0" data-v-3bf1ab04 data-v-3536d535><!--[--><span data-v-3536d535>Playground</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-90d7d232 data-v-c02c67ee><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-c02c67ee data-v-1920dc4a data-v-9de62149><span class="check" data-v-9de62149><span class="icon" data-v-9de62149><!--[--><span class="vpi-sun sun" data-v-1920dc4a></span><span class="vpi-moon moon" data-v-1920dc4a></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-90d7d232 data-v-8c084606 data-v-9ea5b2de><!--[--><a class="VPSocialLink no-icon" href="https://github.com/Tencent/tmagic-editor" aria-label="github" target="_blank" rel="noopener" data-v-9ea5b2de data-v-fbc8ca05><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-90d7d232 data-v-600d423b data-v-09c9f8b4><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-09c9f8b4><span class="vpi-more-horizontal icon" data-v-09c9f8b4></span></button><div class="menu" data-v-09c9f8b4><div class="VPMenu" data-v-09c9f8b4 data-v-813f2462><!----><!--[--><!--[--><!----><div class="group" data-v-600d423b><div class="item appearance" data-v-600d423b><p class="label" data-v-600d423b>Appearance</p><div class="appearance-action" data-v-600d423b><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-600d423b data-v-1920dc4a data-v-9de62149><span class="check" data-v-9de62149><span class="icon" data-v-9de62149><!--[--><span class="vpi-sun sun" data-v-1920dc4a></span><span class="vpi-moon moon" data-v-1920dc4a></span><!--]--></span></span></button></div></div></div><div class="group" data-v-600d423b><div class="item social-links" data-v-600d423b><div class="VPSocialLinks social-links-list" data-v-600d423b data-v-9ea5b2de><!--[--><a class="VPSocialLink no-icon" href="https://github.com/Tencent/tmagic-editor" aria-label="github" target="_blank" rel="noopener" data-v-9ea5b2de data-v-fbc8ca05><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-90d7d232 data-v-fe1766e7><span class="container" data-v-fe1766e7><span class="top" data-v-fe1766e7></span><span class="middle" data-v-fe1766e7></span><span class="bottom" data-v-fe1766e7></span></span></button></div></div></div></div><div class="divider" data-v-90d7d232><div class="divider-line" data-v-90d7d232></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-6dfe06bb data-v-38fd278f><div class="container" data-v-38fd278f><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-38fd278f><span class="vpi-align-left menu-icon" data-v-38fd278f></span><span class="menu-text" data-v-38fd278f>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-38fd278f data-v-0096f25c><button data-v-0096f25c>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-6dfe06bb data-v-99b3c27c><div class="curtain" data-v-99b3c27c></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-99b3c27c><span class="visually-hidden" id="sidebar-aria-label" data-v-99b3c27c> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-30ef2553><section class="VPSidebarItem level-0 has-active" data-v-30ef2553 data-v-ca1de9d4><div class="item" role="button" tabindex="0" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><h2 class="text" data-v-ca1de9d4>文档</h2><!----></div><div class="items" data-v-ca1de9d4><!--[--><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/introduction.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>快速开始</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/conception.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>基础概念</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/publish.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>页面发布</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/runtime.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>RUNTIME</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/component.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>组件开发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/editor-expand.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>编辑器扩展</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/migration.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>升级到1.5.x</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-30ef2553><section class="VPSidebarItem level-0" data-v-30ef2553 data-v-ca1de9d4><div class="item" role="button" tabindex="0" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><h2 class="text" data-v-ca1de9d4>进阶指南</h2><!----></div><div class="items" data-v-ca1de9d4><!--[--><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/js-schema.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>JS Schema</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/layout.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>布局原理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/page.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>页面渲染</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/coupling.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>联动原理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/code-block.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>代码块</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/data-source.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>数据源</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/tmagic-ui.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>@tmagic/ui</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/tmagic-form.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>@tmagic/form</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-30ef2553><section class="VPSidebarItem level-0" data-v-30ef2553 data-v-ca1de9d4><div class="item" role="button" tabindex="0" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><h2 class="text" data-v-ca1de9d4>教程</h2><!----></div><div class="items" data-v-ca1de9d4><!--[--><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>写在前面</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/hello-world.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>1.Hello World</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/runtime.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>2.Runtime</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-ca1de9d4 data-v-ca1de9d4><div class="item" data-v-ca1de9d4><div class="indicator" data-v-ca1de9d4></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/render.html" data-v-ca1de9d4><!--[--><p class="text" data-v-ca1de9d4>3.DSL解析渲染</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-6dfe06bb data-v-1b3f546a><div class="VPDoc has-sidebar has-aside" data-v-1b3f546a data-v-a5165e9c><!--[--><!--]--><div class="container" data-v-a5165e9c><div class="aside" data-v-a5165e9c><div class="aside-curtain" data-v-a5165e9c></div><div class="aside-container" data-v-a5165e9c><div class="aside-content" data-v-a5165e9c><div class="VPDocAside" data-v-a5165e9c data-v-302fb326><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-302fb326 data-v-1e498253><div class="content" data-v-1e498253><div class="outline-marker" data-v-1e498253></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-1e498253>On this page</div><ul class="VPDocOutlineItem root" data-v-1e498253 data-v-1bc86f42><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-302fb326></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-a5165e9c><div class="content-container" data-v-a5165e9c><!--[--><!--]--><main class="main" data-v-a5165e9c><div style="position:relative;" class="vp-doc _tmagic-editor_docs_guide_" data-v-a5165e9c><div><h1 id="快速开始" tabindex="-1">快速开始 <a class="header-anchor" href="#快速开始" aria-label="Permalink to &quot;快速开始&quot;"></a></h1><p>tmagic-editor的编辑器我们已经封装成一个 npm 包,可以直接安装使用。编辑器是使用 vue3 开发的(仅支持vue3),但使用编辑器的业务(runtime)可以不限框架,可以用 vue2、react 等开发业务组件。</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-aKHUE" id="tab-iQPTZLk" checked><label data-title="npm" for="tab-iQPTZLk">npm</label><input type="radio" name="group-aKHUE" id="tab-KKx-qge"><label data-title="pnpm" for="tab-KKx-qge">pnpm</label></div><div class="blocks"><div class="language-bash vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> create</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tmagic@latest</span></span></code></pre></div><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> pnpm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> create</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tmagic</span></span></code></pre></div></div></div><p>按照提示操作可以创建<code>6</code>中项目:</p><ul><li>runtime:运行时DSL渲染</li><li>admin-client:管理端(编辑器)</li><li>components:组件库(组件/插件/数据源)</li><li>component:组件</li><li>data-source:数据源</li><li>plugin:插件</li></ul><p>至少需要一个runtime与admin-client后就可以运行起一个最简单的项目了。</p><p>后续还需要新增组件、插件、数据源等,可以继续添加后面几种类型的项目。</p><p>新增好一个组件/插件/数据源后可以到runtime/tmagic.config.ts中配置到packages中</p><h2 id="手动安装" tabindex="-1">手动安装 <a class="header-anchor" href="#手动安装" aria-label="Permalink to &quot;手动安装&quot;"></a></h2><p>node.js &gt;= 18</p><p>可以通过<a href="https://cn.vitejs.dev/" target="_blank" rel="noreferrer">Vite</a><a href="https://cli.vuejs.org/zh/" target="_blank" rel="noreferrer">Vue CLI</a>快速创建项目。</p><blockquote><p>使用Vue CLI生成的项目需要在vue.config.js中加上配置transpileDependencies: [/@tmagic/]</p></blockquote><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @tmagic/editor</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -S</span></span></code></pre></div><p>由于在实际应用中项目常常会用到例如<a href="https://element-plus.org/" target="_blank" rel="noreferrer">element-plus</a><a href="https://tdesign.tencent.com/vue-next/overview" target="_blank" rel="noreferrer">tdesign-vue-next</a>等UI组件库。为了能让使用者能够选择不同UI库<a href="https://github.com/Tencent/tmagic-editor/tree/master/packages/editor" target="_blank" rel="noreferrer">@tmagic/editor</a>将其中使用到的UI组件封装到<a href="https://github.com/Tencent/tmagic-editor/tree/master/packages/design" target="_blank" rel="noreferrer">@tmagic/design</a>然后通过不同的adapter来指定使用具体的对应的UI库我们提供了<a href="https://github.com/Tencent/tmagic-editor/tree/master/packages/element-plus-adapter" target="_blank" rel="noreferrer">@tmagic/element-plus-adapter</a>来支持<a href="https://element-plus.org/" target="_blank" rel="noreferrer">element-plus</a>,所以还需要安装相关的依赖。</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> @tmagic/element-plus-adapter</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> element-plus</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -S</span></span></code></pre></div><p>editor 中还包含了<a href="https://microsoft.github.io/monaco-editor/" target="_blank" rel="noreferrer">monaco-editor</a>所以还需安装monaco-editor可以参考 monaco-editor 的<a href="https://github.com/microsoft/monaco-editor/blob/main/docs/integrate-esm.md" target="_blank" rel="noreferrer">配置指引</a></p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> monaco-editor</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -S</span></span></code></pre></div><h2 id="快速上手" tabindex="-1">快速上手 <a class="header-anchor" href="#快速上手" aria-label="Permalink to &quot;快速上手&quot;"></a></h2><h2 id="引入-tmagic-editor" tabindex="-1">引入 @tmagic/editor <a class="header-anchor" href="#引入-tmagic-editor" aria-label="Permalink to &quot;引入 @tmagic/editor&quot;"></a></h2><p>在 main.js 中写入以下内容:</p><div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { createApp } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;vue&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ElementPlus </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;element-plus&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> zhCn </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;element-plus/es/locale/lang/zh-cn&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> editorPlugin </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/editor&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> MagicElementPlusAdapter </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/element-plus-adapter&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> App </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;./App.vue&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;element-plus/dist/index.css&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@tmagic/editor/dist/style.css&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> app</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> createApp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(App);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">use</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ElementPlus, {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> locale: zhCn,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">use</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(router);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">use</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(editorPlugin, MagicElementPlusAdapter);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">app.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">mount</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;#app&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><p>以上代码便完成了 @tmagic/editor 的引入。需要注意的是,样式文件需要单独引入。</p><p>可以参考我们提供的<a href="https://github.com/Tencent/tmagic-editor/blob/master/playground/src/main.ts" target="_blank" rel="noreferrer">Playground</a>示例实现代码</p><h2 id="使用-m-editor-组件" tabindex="-1">使用 m-editor 组件 <a class="header-anchor" href="#使用-m-editor-组件" aria-label="Permalink to &quot;使用 m-editor 组件&quot;"></a></h2><p>在 App.vue 中写入以下内容:</p><div class="language-html vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">m-editor</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> v-model</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;dsl&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :menu</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;menu&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :runtime-url</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;runtimeUrl&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :props-configs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;propsConfigs&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :props-values</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;propsValues&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :component-group-list</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;componentGroupList&quot;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">m-editor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { defineComponent, ref } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;vue&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> defineComponent</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;App&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setup</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() {</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> menu: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ref</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> left: [</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 顶部左侧菜单按钮</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> center: [</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 顶部中间菜单按钮</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> right: [</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 顶部右侧菜单按钮</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }),</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> dsl: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ref</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 初始化页面数据</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }),</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> runtimeUrl: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/runtime/vue3/playground/index.html&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> propsConfigs: [</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 组件属性列表</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> propsValues: [</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 组件默认值</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> componentGroupList: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">ref</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">([</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // 组件列表</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ]),</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> };</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">style</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;scss&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> html</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">body</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> width</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">100</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">%</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> height</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">100</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">%</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> margin</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> padding</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> overflow</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">hidden</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> #app</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> width</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">100</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">%</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> height</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">100</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">%</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> display</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">flex</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> .m-editor</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> flex</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> height</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">100</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">%</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">style</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span></code></pre></div><p>关于 <a href="https://github.com/Tencent/tmagic-editor/tree/master/packages/editor" target="_blank" rel="noreferrer">@tmagic/editor</a> 组件,更多的属性配置详情请参考<a href="./../api/editor/props.html">编辑器 API</a></p><p>其中,<strong>有四个需要注意的属性配置项</strong><code>runtimeUrl</code> <code>values</code> <code>configs</code> <code>componentGroupList</code>。这是能让我们的编辑器正常运行的关键。</p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>如果出现<code>Preprocessor dependency &quot;sass&quot; not found. Did you install it?</code>那么需要install sass</p><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">npm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> sass</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -D</span></span></code></pre></div></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>如果是使用vite构建工具如果出现 <code>Uncaught ReferenceError: global is not defined</code>那么需要再vite.config.js中添加如下配置</p><div class="language-js vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">js</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> optimizeDeps</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> esbuildOptions</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> define</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> global</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;globalThis&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></div><h2 id="runtimeurl" tabindex="-1">runtimeUrl <a class="header-anchor" href="#runtimeurl" aria-label="Permalink to &quot;runtimeUrl&quot;"></a></h2><p>该配置涉及到 <a href="./runtime.html">runtime 概念</a>tmagic-editor编辑器中心的模拟器画布是一个 iframe这里的 <code>runtimeUrl</code> 配置的,就是你提供的 iframe 的 url其中渲染了一个 runtime用来响应编辑器中的组件增删改等操作。</p><h2 id="componentgrouplist" tabindex="-1">componentGroupList <a class="header-anchor" href="#componentgrouplist" aria-label="Permalink to &quot;componentGroupList&quot;"></a></h2><p><code>componentGroupList</code> 是指定左侧组件库内容的配置。此处定义了在编辑器组件库中有什么组件。在添加的时候通过组件 <code>type</code> 来确定 runtime 中要渲染什么组件。可以参考 <a href="./../api/editor/props.html#componentgrouplist">componentGroupList 配置</a></p><h2 id="propsconfigs-propsvalues" tabindex="-1">propsConfigs/propsValues <a class="header-anchor" href="#propsconfigs-propsvalues" aria-label="Permalink to &quot;propsConfigs/propsValues&quot;"></a></h2><p><code>propsConfigs</code> <code>propsValues</code><code>componentGroupList</code> 中声明的组件是一一对应的,通过 <code>type</code> 来识别属于哪个组件,该配置涉及的内容,就是组件的表单配置描述,在<a href="./component.html">组件开发中</a>会通过 formConfig 配置来声明这份内容。</p><p><code>configs</code> 既可以通过 hardcode 方式写上每个组件的表单配置,也可以通过组件打包方式得到对应内容,然后通过异步加载来载入。比如:</p><div class="language-javascript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">javascript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setup</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">() {</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> asyncLoadJs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">`/runtime/vue3/assets/config.js`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">then</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> propsConfigs.value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> window.magicPresetConfigs;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> asyncLoadJs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">`/runtime/vue3/assets/value.js`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">then</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> propsValues.value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> window.magicPresetValues;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">如何快速得到一个 configs/values</p><p>上述的 runtime 产物中dist 目录中即包含一个 entry 文件夹在你的项目组件初始化之后分别异步加载里面的config/index.umd.js、value/index.umd.js。并如上面代码中赋值给 configs/values 即可。</p></div><h2 id="更多" tabindex="-1">更多 <a class="header-anchor" href="#更多" aria-label="Permalink to &quot;更多&quot;"></a></h2><p>通过上述步骤,可以快速得到一个初始化的简单编辑器。</p><p>除了上述内容外文档的其他章节中也会更深入的描述整个tmagic-editor的设计理念和实现细节。同时你也可以查看我们的<a href="https://github.com/Tencent/tmagic-editor" target="_blank" rel="noreferrer">项目源码</a>,从源码提供的 playground 和 runtime 示例来开发和理解tmagic-editor。</p></div></div></main><footer class="VPDocFooter" data-v-a5165e9c data-v-f8258240><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-f8258240><span class="visually-hidden" id="doc-footer-aria-label" data-v-f8258240>Pager</span><div class="pager" data-v-f8258240><a class="VPLink link pager-link prev" href="/tmagic-editor/docs/guide/introduction.html" data-v-f8258240><!--[--><span class="desc" data-v-f8258240>Previous page</span><span class="title" data-v-f8258240>介绍</span><!--]--></a></div><div class="pager" data-v-f8258240><a class="VPLink link pager-link next" href="/tmagic-editor/docs/guide/conception.html" data-v-f8258240><!--[--><span class="desc" data-v-f8258240>Next page</span><span class="title" data-v-f8258240>基础概念</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-6dfe06bb data-v-89c31066><div class="container" data-v-89c31066><p class="message" data-v-89c31066>Powered by 腾讯视频会员平台技术中心</p><p class="copyright" data-v-89c31066>Copyright (C) 2023 THL A29 Limited, a Tencent company.</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_editor_codeblockservicemethods.md\":\"ByEWNde9\",\"api_editor_componentlistservicemethods.md\":\"BlIpybO4\",\"api_editor_datasourceservicemethods.md\":\"dOFTimur\",\"api_editor_editorserviceevents.md\":\"NWnbRW-u\",\"api_editor_editorservicemethods.md\":\"BkDhL-Jz\",\"api_editor_events.md\":\"D-n7YlOa\",\"api_editor_eventsservicemethods.md\":\"B7XiPAU9\",\"api_editor_historyserviceevents.md\":\"Ch4EzexV\",\"api_editor_historyservicemethods.md\":\"BGNz7JVb\",\"api_editor_props.md\":\"C6nXtNoN\",\"api_editor_propsserviceevents.md\":\"Bi16r2I6\",\"api_editor_propsservicemethods.md\":\"CtS4AyA6\",\"api_editor_slots.md\":\"DJc0kZyD\",\"api_editor_storageservicemethods.md\":\"B8JZCP8b\",\"api_editor_uiservicemethods.md\":\"BhNAYUwK\",\"api_form_form-dialog-events.md\":\"B1Tvd5mR\",\"api_form_form-dialog-methods.md\":\"BHbhKE0E\",\"api_form_form-dialog-props.md\":\"DGgPNL4j\",\"api_form_form-events.md\":\"DjtkQ04g\",\"api_form_form-methods.md\":\"D8KfiSNh\",\"api_form_form-props.md\":\"BuujGPjG\",\"api_stage_coreevents.md\":\"DWLYMszB\",\"api_stage_coremethods.md\":\"DiiD7c0X\",\"api_table_events.md\":\"CfFQQmdb\",\"api_table_methods.md\":\"DK7PIkqn\",\"api_table_props.md\":\"DO3IJxZ9\",\"form-config_compare.md\":\"CzwGEwJZ\",\"form-config_fields_cascader.md\":\"DVdum0nR\",\"form-config_fields_checkbox.md\":\"DE6q5Ibr\",\"form-config_fields_color-picker.md\":\"DXoJjSov\",\"form-config_fields_date-picker.md\":\"D2VhlcjQ\",\"form-config_fields_datetime-picker.md\":\"LJjuzKo6\",\"form-config_fields_display.md\":\"B7Bf4Lpm\",\"form-config_fields_hidden.md\":\"3tLOI4Ku\",\"form-config_fields_link.md\":\"XRLOekQP\",\"form-config_fields_number.md\":\"CFsP0NKf\",\"form-config_fields_radio.md\":\"CNVjIAaP\",\"form-config_fields_select.md\":\"y8DvtD5s\",\"form-config_fields_switch.md\":\"CoIuX0Sf\",\"form-config_fields_text.md\":\"TX1l0lwW\",\"form-config_fields_textarea.md\":\"BBSDxUFe\",\"form-config_fields_time-picker.md\":\"C9wRi_IB\",\"form-config_layout.md\":\"fUDi4ZGv\",\"form-config_relate.md\":\"Dw-kLwJI\",\"guide_advanced_code-block.md\":\"1m2EdpET\",\"guide_advanced_coupling.md\":\"XSIQCzCw\",\"guide_advanced_data-source.md\":\"Q6P421HC\",\"guide_advanced_js-schema.md\":\"XQRodkeW\",\"guide_advanced_layout.md\":\"PE5_6dEb\",\"guide_advanced_page.md\":\"BeH6A7ti\",\"guide_advanced_tmagic-form.md\":\"BAl3iNDg\",\"guide_advanced_tmagic-ui.md\":\"D6lHMeDC\",\"guide_component.md\":\"C3ln72FC\",\"guide_conception.md\":\"DLxZBuUJ\",\"guide_editor-expand.md\":\"C0W8uGZG\",\"guide_index.md\":\"BM-Tluo7\",\"guide_introduction.md\":\"Ch_-Uv4O\",\"guide_migration.md\":\"Cgzwa-8h\",\"guide_publish.md\":\"DuQIDRyD\",\"guide_runtime.md\":\"DXMc06eN\",\"guide_tutorial_hello-world.md\":\"BrEh5Nq7\",\"guide_tutorial_index.md\":\"CbM8aiXv\",\"guide_tutorial_render.md\":\"D_6uyszN\",\"guide_tutorial_runtime.md\":\"BQ9hcU3d\",\"index.md\":\"CFu6CvwY\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"tmagic-editor\",\"description\":\"页面可视化平台\",\"base\":\"/tmagic-editor/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"./favicon.png\",\"search\":{\"provider\":\"local\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/Tencent/tmagic-editor\"}],\"footer\":{\"message\":\"Powered by 腾讯视频会员平台技术中心\",\"copyright\":\"Copyright (C) 2023 THL A29 Limited, a Tencent company.\"},\"nav\":[{\"text\":\"文档\",\"link\":\"/guide/\",\"activeMatch\":\"/guide/\"},{\"text\":\"API\",\"link\":\"/api/editor/props\",\"activeMatch\":\"/api/\"},{\"text\":\"表单配置\",\"link\":\"/form-config/fields/text\",\"activeMatch\":\"/form-config/\"},{\"text\":\"更新日志\",\"link\":\"https://github.com/Tencent/tmagic-editor/releases\"},{\"text\":\"Playground\",\"link\":\"https://tencent.github.io/tmagic-editor/playground/index.html\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"文档\",\"items\":[{\"text\":\"介绍\",\"link\":\"/guide/introduction.md\"},{\"text\":\"快速开始\",\"link\":\"/guide/\"},{\"text\":\"基础概念\",\"link\":\"/guide/conception.md\"},{\"text\":\"页面发布\",\"link\":\"/guide/publish.md\"},{\"text\":\"RUNTIME\",\"link\":\"/guide/runtime.md\"},{\"text\":\"组件开发\",\"link\":\"/guide/component.md\"},{\"text\":\"编辑器扩展\",\"link\":\"/guide/editor-expand.md\"},{\"text\":\"升级到1.5.x\",\"link\":\"/guide/migration.md\"}]},{\"text\":\"进阶指南\",\"items\":[{\"text\":\"JS Schema\",\"link\":\"/guide/advanced/js-schema.md\"},{\"text\":\"布局原理\",\"link\":\"/guide/advanced/layout.md\"},{\"text\":\"页面渲染\",\"link\":\"/guide/advanced/page.md\"},{\"text\":\"联动原理\",\"link\":\"/guide/advanced/coupling.md\"},{\"text\":\"代码块\",\"link\":\"/guide/advanced/code-block.md\"},{\"text\":\"数据源\",\"link\":\"/guide/advanced/data-source.md\"},{\"text\":\"@tmagic/ui\",\"link\":\"/guide/advanced/tmagic-ui.md\"},{\"text\":\"@tmagic/form\",\"link\":\"/guide/advanced/tmagic-form.md\"}]},{\"text\":\"教程\",\"items\":[{\"text\":\"写在前面\",\"link\":\"/guide/tutorial/\"},{\"text\":\"1.Hello World\",\"link\":\"/guide/tutorial/hello-world.md\"},{\"text\":\"2.Runtime\",\"link\":\"/guide/tutorial/runtime.md\"},{\"text\":\"3.DSL解析渲染\",\"link\":\"/guide/tutorial/render.md\"}]}],\"/api/\":[{\"text\":\"编辑器\",\"items\":[{\"text\":\"Editor组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/editor/props.md\"},{\"text\":\"slots\",\"link\":\"/api/editor/slots.md\"},{\"text\":\"events\",\"link\":\"/api/editor/events.md\"}]},{\"text\":\"editorService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/editorServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/editorServiceEvents.md\"}]},{\"text\":\"propsService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/propsServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/propsServiceEvents.md\"}]},{\"text\":\"historyService\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/editor/historyServiceMethods.md\"},{\"text\":\"事件\",\"link\":\"/api/editor/historyServiceEvents.md\"}]},{\"text\":\"eventsService\",\"link\":\"/api/editor/eventsServiceMethods.md\"},{\"text\":\"uiService\",\"link\":\"/api/editor/uiServiceMethods.md\"},{\"text\":\"codeBlockService\",\"link\":\"/api/editor/codeBlockServiceMethods.md\"},{\"text\":\"componentListService\",\"link\":\"/api/editor/componentListServiceMethods.md\"},{\"text\":\"storageService\",\"link\":\"/api/editor/storageServiceMethods.md\"}]},{\"text\":\"表单\",\"items\":[{\"text\":\"Form组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/form/form-props\"},{\"text\":\"methods\",\"link\":\"/api/form/form-methods\"},{\"text\":\"events\",\"link\":\"/api/form/form-events\"}]},{\"text\":\"FormDialog组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/form/form-dialog-props\"},{\"text\":\"methods\",\"link\":\"/api/form/form-dialog-methods\"},{\"text\":\"events\",\"link\":\"/api/form/form-dialog-events\"}]}]},{\"text\":\"表格\",\"items\":[{\"text\":\"Table组件\",\"items\":[{\"text\":\"props\",\"link\":\"/api/table/props\"},{\"text\":\"methods\",\"link\":\"/api/table/methods\"},{\"text\":\"events\",\"link\":\"/api/table/events\"}]}]},{\"text\":\"stage\",\"items\":[{\"text\":\"StageCore\",\"items\":[{\"text\":\"方法\",\"link\":\"/api/stage/coreMethods\"},{\"text\":\"事件\",\"link\":\"/api/stage/coreEvents\"}]}]}],\"/form-config/\":[{\"text\":\"基础配置\",\"items\":[{\"text\":\"Input输入框\",\"link\":\"/form-config/fields/text.md\"},{\"text\":\"Textarea文本域\",\"link\":\"/form-config/fields/textarea.md\"},{\"text\":\"InputNumber计数器\",\"link\":\"/form-config/fields/number.md\"},{\"text\":\"Display只读文本\",\"link\":\"/form-config/fields/display.md\"},{\"text\":\"Hidden隐藏域\",\"link\":\"/form-config/fields/hidden.md\"},{\"text\":\"Link链接\",\"link\":\"/form-config/fields/link.md\"},{\"text\":\"Checkbox多选框\",\"link\":\"/form-config/fields/checkbox.md\"},{\"text\":\"Radio单选框\",\"link\":\"/form-config/fields/radio.md\"},{\"text\":\"Switch开关\",\"link\":\"/form-config/fields/switch.md\"},{\"text\":\"Select选择器\",\"link\":\"/form-config/fields/select.md\"},{\"text\":\"Cascader级联选择器\",\"link\":\"/form-config/fields/cascader.md\"},{\"text\":\"ColorPicker颜色选择器\",\"link\":\"/form-config/fields/color-picker.md\"},{\"text\":\"DatePick日期选择器\",\"link\":\"/form-config/fields/date-picker.md\"},{\"text\":\"DatetimePick日期时间选择器\",\"link\":\"/form-config/fields/datetime-picker.md\"},{\"text\":\"TimePick时间选择器\",\"link\":\"/form-config/fields/time-picker.md\"}]},{\"text\":\"布局配置\",\"items\":[{\"text\":\"布局\",\"link\":\"/form-config/layout.md\"}]},{\"text\":\"联动配置\",\"items\":[{\"text\":\"联动\",\"link\":\"/form-config/relate.md\"}]},{\"text\":\"表单对比\",\"items\":[{\"text\":\"表单对比\",\"link\":\"/form-config/compare.md\"}]}]}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>