2025-09-16 11:54:19 +00:00

66 lines
38 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.4">
<link rel="preload stylesheet" href="/tmagic-editor/docs/assets/style.DbJLouJH.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.B23bkaPJ.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.BDElwKBS.js">
<link rel="modulepreload" href="/tmagic-editor/docs/assets/chunks/framework.BUS44qir.js">
<link rel="modulepreload" href="/tmagic-editor/docs/assets/guide_advanced_page.md.DJnk13yd.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-5112b351><!--[--><!--]--><!--[--><span tabindex="-1" data-v-3cc6b2a3></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-3cc6b2a3>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5112b351 data-v-62886965><div class="VPNavBar" data-v-62886965 data-v-c0499fbb><div class="wrapper" data-v-c0499fbb><div class="container" data-v-c0499fbb><div class="title" data-v-c0499fbb><div class="VPNavBarTitle has-sidebar" data-v-c0499fbb data-v-0d118986><a class="title" href="/tmagic-editor/docs/" data-v-0d118986><!--[--><!--]--><!--[--><img class="VPImage logo" src="./favicon.png" alt data-v-500166df><!--]--><span data-v-0d118986>tmagic-editor</span><!--[--><!--]--></a></div></div><div class="content" data-v-c0499fbb><div class="content-body" data-v-c0499fbb><!--[--><!--]--><div class="VPNavBarSearch search" data-v-c0499fbb><!--[--><!----><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-c0499fbb data-v-a4cb6a8d><span id="main-nav-aria-label" class="visually-hidden" data-v-a4cb6a8d> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/tmagic-editor/docs/guide/" tabindex="0" data-v-a4cb6a8d data-v-958a0689><!--[--><span data-v-958a0689>文档</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/api/editor/props.html" tabindex="0" data-v-a4cb6a8d data-v-958a0689><!--[--><span data-v-958a0689>API</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/tmagic-editor/docs/form-config/fields/text.html" tabindex="0" data-v-a4cb6a8d data-v-958a0689><!--[--><span data-v-958a0689>表单配置</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-a4cb6a8d data-v-958a0689><!--[--><span data-v-958a0689>更新日志</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-a4cb6a8d data-v-958a0689><!--[--><span data-v-958a0689>Playground</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-c0499fbb data-v-43c0048b><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-43c0048b data-v-3bd15d6c data-v-2aa49ef3><span class="check" data-v-2aa49ef3><span class="icon" data-v-2aa49ef3><!--[--><span class="vpi-sun sun" data-v-3bd15d6c></span><span class="vpi-moon moon" data-v-3bd15d6c></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-c0499fbb data-v-d311d942 data-v-104c9a5e><!--[--><a class="VPSocialLink no-icon" href="https://github.com/Tencent/tmagic-editor" aria-label="github" target="_blank" rel="noopener" data-v-104c9a5e data-v-e3028f64><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-c0499fbb data-v-5021a8fa data-v-e50bfc1c><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-e50bfc1c><span class="vpi-more-horizontal icon" data-v-e50bfc1c></span></button><div class="menu" data-v-e50bfc1c><div class="VPMenu" data-v-e50bfc1c data-v-0c41071f><!----><!--[--><!--[--><!----><div class="group" data-v-5021a8fa><div class="item appearance" data-v-5021a8fa><p class="label" data-v-5021a8fa>Appearance</p><div class="appearance-action" data-v-5021a8fa><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-5021a8fa data-v-3bd15d6c data-v-2aa49ef3><span class="check" data-v-2aa49ef3><span class="icon" data-v-2aa49ef3><!--[--><span class="vpi-sun sun" data-v-3bd15d6c></span><span class="vpi-moon moon" data-v-3bd15d6c></span><!--]--></span></span></button></div></div></div><div class="group" data-v-5021a8fa><div class="item social-links" data-v-5021a8fa><div class="VPSocialLinks social-links-list" data-v-5021a8fa data-v-104c9a5e><!--[--><a class="VPSocialLink no-icon" href="https://github.com/Tencent/tmagic-editor" aria-label="github" target="_blank" rel="noopener" data-v-104c9a5e data-v-e3028f64><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-c0499fbb data-v-44667623><span class="container" data-v-44667623><span class="top" data-v-44667623></span><span class="middle" data-v-44667623></span><span class="bottom" data-v-44667623></span></span></button></div></div></div></div><div class="divider" data-v-c0499fbb><div class="divider-line" data-v-c0499fbb></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5112b351 data-v-2b53824b><div class="container" data-v-2b53824b><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-2b53824b><span class="vpi-align-left menu-icon" data-v-2b53824b></span><span class="menu-text" data-v-2b53824b>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2b53824b data-v-7fc0da3d><button data-v-7fc0da3d>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5112b351 data-v-9d091a31><div class="curtain" data-v-9d091a31></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-9d091a31><span class="visually-hidden" id="sidebar-aria-label" data-v-9d091a31> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-56448429><section class="VPSidebarItem level-0" data-v-56448429 data-v-0abd57c7><div class="item" role="button" tabindex="0" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><h2 class="text" data-v-0abd57c7>文档</h2><!----></div><div class="items" data-v-0abd57c7><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/introduction.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>快速开始</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/conception.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>基础概念</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/publish.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>页面发布</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/runtime.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>RUNTIME</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/component.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>组件开发</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/editor-expand.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>编辑器扩展</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/migration.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>升级到1.5.x</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-56448429><section class="VPSidebarItem level-0 has-active" data-v-56448429 data-v-0abd57c7><div class="item" role="button" tabindex="0" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><h2 class="text" data-v-0abd57c7>进阶指南</h2><!----></div><div class="items" data-v-0abd57c7><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/js-schema.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>JS Schema</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/layout.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>布局原理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/page.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>页面渲染</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/coupling.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>联动原理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/code-block.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>代码块</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/data-source.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>数据源</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/tmagic-ui.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>@tmagic/ui</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/advanced/tmagic-form.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>@tmagic/form</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-56448429><section class="VPSidebarItem level-0" data-v-56448429 data-v-0abd57c7><div class="item" role="button" tabindex="0" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><h2 class="text" data-v-0abd57c7>教程</h2><!----></div><div class="items" data-v-0abd57c7><!--[--><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>写在前面</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/hello-world.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>1.Hello World</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/runtime.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>2.Runtime</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-0abd57c7 data-v-0abd57c7><div class="item" data-v-0abd57c7><div class="indicator" data-v-0abd57c7></div><a class="VPLink link link" href="/tmagic-editor/docs/guide/tutorial/render.html" data-v-0abd57c7><!--[--><p class="text" data-v-0abd57c7>3.DSL解析渲染</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5112b351 data-v-3820a0fe><div class="VPDoc has-sidebar has-aside" data-v-3820a0fe data-v-1e194a6d><!--[--><!--]--><div class="container" data-v-1e194a6d><div class="aside" data-v-1e194a6d><div class="aside-curtain" data-v-1e194a6d></div><div class="aside-container" data-v-1e194a6d><div class="aside-content" data-v-1e194a6d><div class="VPDocAside" data-v-1e194a6d data-v-a6ddffa9><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-a6ddffa9 data-v-1ef17039><div class="content" data-v-1ef17039><div class="outline-marker" data-v-1ef17039></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-1ef17039>On this page</div><ul class="VPDocOutlineItem root" data-v-1ef17039 data-v-6b460e5b><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-a6ddffa9></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-1e194a6d><div class="content-container" data-v-1e194a6d><!--[--><!--]--><main class="main" data-v-1e194a6d><div style="position:relative;" class="vp-doc _tmagic-editor_docs_guide_advanced_page" data-v-1e194a6d><div><h1 id="页面渲染" tabindex="-1">页面渲染 <a class="header-anchor" href="#页面渲染" aria-label="Permalink to &quot;页面渲染&quot;"></a></h1><p>tmagic-editor的页面渲染是通过在载入编辑器中保存的 DSL 配置,通过 ui 渲染器渲染页面。在容器布局原理里我们提到过,容器和组件在配置中呈树状结构,所以渲染页面的时候,渲染器会递归配置内容,从而渲染出页面所有组件。</p><img src="https://vfiles.gtimg.cn/vupload/20211009/f4d3031633778551251.png"><h2 id="容器渲染" tabindex="-1">容器渲染 <a class="header-anchor" href="#容器渲染" aria-label="Permalink to &quot;容器渲染&quot;"></a></h2><p>页面的渲染器,其实就是两个基础组件,基础容器组件和基础组件。页面在读到 DSL 配置之后,根组件必定是一个容器,此时渲染基础容器组件,而容器组件的职责很简单,就是将其子组件渲染出来。具体形式为:</p><div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</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;">div</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;">magic-ui-component</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> </span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> v-for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;item in config.items&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;item.id&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;item&quot;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &gt;&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">magic-ui-component</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;">div</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;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</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;">&#39;magic-ui-container&#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;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span></code></pre></div><h2 id="组件渲染" tabindex="-1">组件渲染 <a class="header-anchor" href="#组件渲染" aria-label="Permalink to &quot;组件渲染&quot;"></a></h2><p>所有tmagic-editor组件都通过一个tmagic-editor基础组件来渲染。这个基础组件会识别当前渲染组件的类型。如果当前渲染组件是普通组件包括ui中提供的基础组件和业务开发的业务组件则直接渲染如果当前渲染组件是容器则回到<a href="#容器渲染">容器渲染</a>逻辑中。</p><p>基础组件的具体形式为:</p><div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</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;">component</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :is</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;tagName&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> :config</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;config&quot;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &gt;&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">component</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:#6F42C1;--shiki-dark:#B392F0;"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;ts&quot;</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;"> { computed, defineComponent } </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>
<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;">&#39;magic-ui-component&#39;</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;"> props: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config: {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> type: Object,</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> default</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;"> },</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;"> setup</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">props</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;"> tagName: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">computed</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(() </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> `magic-ui-${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">props</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">config</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">.</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}`</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;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span></code></pre></div><h2 id="渲染器示例" tabindex="-1">渲染器示例 <a class="header-anchor" href="#渲染器示例" aria-label="Permalink to &quot;渲染器示例&quot;"></a></h2><p>在tmagic-editor的示例项目中我们提供了三个版本的 @tmagic/ui。可以参考对应前端框架的渲染器实现。</p><ul><li><a href="https://github.com/Tencent/tmagic-editor/blob/master/vue-components/container/src/Container.vue" target="_blank" rel="noreferrer">vue 渲染器</a></li><li><a href="https://github.com/Tencent/tmagic-editor/blob/master/react-components/container/src/Container.tsx" target="_blank" rel="noreferrer">react 渲染器</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-1e194a6d data-v-dd935c2d><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-dd935c2d><span class="visually-hidden" id="doc-footer-aria-label" data-v-dd935c2d>Pager</span><div class="pager" data-v-dd935c2d><a class="VPLink link pager-link prev" href="/tmagic-editor/docs/guide/advanced/layout.html" data-v-dd935c2d><!--[--><span class="desc" data-v-dd935c2d>Previous page</span><span class="title" data-v-dd935c2d>布局原理</span><!--]--></a></div><div class="pager" data-v-dd935c2d><a class="VPLink link pager-link next" href="/tmagic-editor/docs/guide/advanced/coupling.html" data-v-dd935c2d><!--[--><span class="desc" data-v-dd935c2d>Next page</span><span class="title" data-v-dd935c2d>联动原理</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5112b351 data-v-3a1978ed><div class="container" data-v-3a1978ed><p class="message" data-v-3a1978ed>Powered by 腾讯视频会员平台技术中心</p><p class="copyright" data-v-3a1978ed>Copyright (C) 2025 Tencent.</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_editor_codeblockservicemethods.md\":\"DzqMdyoI\",\"api_editor_componentlistservicemethods.md\":\"DGW1vEcP\",\"api_editor_datasourceservicemethods.md\":\"PU3ihNkQ\",\"api_editor_editorserviceevents.md\":\"Bi_L7sNm\",\"api_editor_editorservicemethods.md\":\"CwcIvSEE\",\"api_editor_events.md\":\"DNVQEesm\",\"api_editor_eventsservicemethods.md\":\"Omw-3rU-\",\"api_editor_historyserviceevents.md\":\"BkMkuslw\",\"api_editor_historyservicemethods.md\":\"DLgB-H6D\",\"api_editor_props.md\":\"BrXcrjpa\",\"api_editor_propsserviceevents.md\":\"CTDRnmSP\",\"api_editor_propsservicemethods.md\":\"C9Ko54l6\",\"api_editor_slots.md\":\"ZN6SlSmI\",\"api_editor_storageservicemethods.md\":\"BhZsHgaV\",\"api_editor_uiservicemethods.md\":\"C50loAuI\",\"api_form_form-dialog-events.md\":\"BukM0n-V\",\"api_form_form-dialog-methods.md\":\"5K1k3ajE\",\"api_form_form-dialog-props.md\":\"BP834QEt\",\"api_form_form-events.md\":\"C3xZ-OOc\",\"api_form_form-methods.md\":\"GDJeQmsP\",\"api_form_form-props.md\":\"ChF66zbE\",\"api_stage_coreevents.md\":\"CJS8oUiv\",\"api_stage_coremethods.md\":\"Crcc-1vc\",\"api_table_events.md\":\"5d7mIgYf\",\"api_table_methods.md\":\"704AMyYJ\",\"api_table_props.md\":\"Z7S4FphK\",\"form-config_compare.md\":\"ChkrRXAG\",\"form-config_fields_cascader.md\":\"Dbb-e42W\",\"form-config_fields_checkbox.md\":\"DjMTKluz\",\"form-config_fields_color-picker.md\":\"yqQ-DMfM\",\"form-config_fields_date-picker.md\":\"CJ09pORX\",\"form-config_fields_datetime-picker.md\":\"Cc7cmwWi\",\"form-config_fields_display.md\":\"F0WP_S8s\",\"form-config_fields_hidden.md\":\"AYN3ialw\",\"form-config_fields_link.md\":\"BVUtVPSc\",\"form-config_fields_number.md\":\"CQUJh00D\",\"form-config_fields_radio.md\":\"01LIrZOa\",\"form-config_fields_select.md\":\"3EXaSg15\",\"form-config_fields_switch.md\":\"BsiBw5N7\",\"form-config_fields_text.md\":\"DugLaj60\",\"form-config_fields_textarea.md\":\"BsfIpx3Q\",\"form-config_fields_time-picker.md\":\"DucKkWKz\",\"form-config_layout.md\":\"OZTjvEPX\",\"form-config_relate.md\":\"MzeOlWBa\",\"guide_advanced_code-block.md\":\"ea5dq7oK\",\"guide_advanced_coupling.md\":\"DBWQ5FPk\",\"guide_advanced_data-source.md\":\"D-_0MQuc\",\"guide_advanced_js-schema.md\":\"Bne_-B3G\",\"guide_advanced_layout.md\":\"DVdFJzAM\",\"guide_advanced_page.md\":\"DJnk13yd\",\"guide_advanced_tmagic-form.md\":\"DTXAnxwn\",\"guide_advanced_tmagic-ui.md\":\"BQ5SEbRb\",\"guide_component.md\":\"CaeAnGdt\",\"guide_conception.md\":\"BsT_G64M\",\"guide_editor-expand.md\":\"Bsd0qfdU\",\"guide_index.md\":\"CR8uihwJ\",\"guide_introduction.md\":\"XlEb_7NU\",\"guide_migration.md\":\"Cqs1j436\",\"guide_publish.md\":\"Kr0ZU_xm\",\"guide_runtime.md\":\"Bi6536qn\",\"guide_tutorial_hello-world.md\":\"CencYy82\",\"guide_tutorial_index.md\":\"KGCWmTCF\",\"guide_tutorial_render.md\":\"DoDvP2H_\",\"guide_tutorial_runtime.md\":\"BtAV0Fnv\",\"index.md\":\"C2BvvUSA\"}");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) 2025 Tencent.\"},\"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>