tmagic-editor/docs/assets/runtime-api_data-source_dataSource.md.D_vEMdmL.js
2026-02-02 11:13:56 +00:00

25 lines
18 KiB
JavaScript
Raw 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.

import{ax as s,z as a,A as i,b2 as e}from"./chunks/framework.DkLJC2NO.js";const k=JSON.parse('{"title":"DataSource基础数据源","description":"","frontmatter":{},"headers":[],"relativePath":"runtime-api/data-source/dataSource.md","filePath":"runtime-api/data-source/dataSource.md"}'),d={name:"runtime-api/data-source/dataSource.md"};function n(l,t,h,p,o,r){return i(),a("div",null,[...t[0]||(t[0]=[e(`<h1 id="datasource-基础数据源" tabindex="-1">DataSource基础数据源 <a class="header-anchor" href="#datasource-基础数据源" aria-label="Permalink to &quot;DataSource基础数据源&quot;"></a></h1><p><code>DataSource</code> 是 <code>@tmagic/data-source</code> 的基础数据源类,用于静态数据管理。</p><h2 id="构造函数" tabindex="-1">构造函数 <a class="header-anchor" href="#构造函数" aria-label="Permalink to &quot;构造函数&quot;"></a></h2><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</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;">new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> DataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(options: DataSourceOptions)</span></span></code></pre></div><h3 id="datasourceoptions" tabindex="-1">DataSourceOptions <a class="header-anchor" href="#datasourceoptions" aria-label="Permalink to &quot;DataSourceOptions&quot;"></a></h3><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>schema</code></td><td><code>DataSourceSchema</code></td><td>数据源配置</td></tr><tr><td><code>app</code></td><td><code>TMagicApp</code></td><td>应用实例</td></tr><tr><td><code>initialData</code></td><td><code>Record&lt;string, any&gt;</code></td><td>初始数据(可选)</td></tr><tr><td><code>useMock</code></td><td><code>boolean</code></td><td>使用 Mock 数据(可选)</td></tr><tr><td><code>request</code></td><td><code>RequestFunction</code></td><td>请求函数(可选)</td></tr><tr><td><code>ObservedDataClass</code></td><td><code>ObservedDataClass</code></td><td>观察者数据类(可选)</td></tr></tbody></table><h3 id="datasourceschema" tabindex="-1">DataSourceSchema <a class="header-anchor" href="#datasourceschema" aria-label="Permalink to &quot;DataSourceSchema&quot;"></a></h3><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td><code>string</code></td><td>数据源 ID</td></tr><tr><td><code>type</code></td><td><code>&#39;base&#39;</code></td><td>数据源类型</td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>数据源标题(可选)</td></tr><tr><td><code>description</code></td><td><code>string</code></td><td>数据源描述(可选)</td></tr><tr><td><code>fields</code></td><td><code>DataSchema[]</code></td><td>字段配置</td></tr><tr><td><code>methods</code></td><td><code>CodeBlockContent[]</code></td><td>自定义方法配置(可选)</td></tr><tr><td><code>mocks</code></td><td><code>MockSchema</code></td><td>Mock 数据配置(可选)</td></tr><tr><td><code>events</code></td><td><code>EventConfig[]</code></td><td>事件配置(可选)</td></tr></tbody></table><h2 id="属性" tabindex="-1">属性 <a class="header-anchor" href="#属性" aria-label="Permalink to &quot;属性&quot;"></a></h2><table tabindex="0"><thead><tr><th>属性</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td><code>string</code></td><td>数据源 ID只读</td></tr><tr><td><code>type</code></td><td><code>string</code></td><td>数据源类型,值为 <code>&#39;base&#39;</code></td></tr><tr><td><code>schema</code></td><td><code>DataSourceSchema</code></td><td>配置 schema</td></tr><tr><td><code>fields</code></td><td><code>DataSchema[]</code></td><td>字段配置</td></tr><tr><td><code>methods</code></td><td><code>CodeBlockContent[]</code></td><td>自定义方法配置</td></tr><tr><td><code>data</code></td><td><code>any</code></td><td>当前数据</td></tr><tr><td><code>isInit</code></td><td><code>boolean</code></td><td>是否已初始化</td></tr></tbody></table><h2 id="实例方法" tabindex="-1">实例方法 <a class="header-anchor" href="#实例方法" aria-label="Permalink to &quot;实例方法&quot;"></a></h2><h3 id="setdata" tabindex="-1">setData <a class="header-anchor" href="#setdata" aria-label="Permalink to &quot;setData&quot;"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{any} data</code> 数据</li><li><code>{string} path</code> 数据路径(可选)</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>设置数据源数据。如果指定路径,则只更新该路径的数据。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// 设置整个数据</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setData</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({ name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;test&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, count: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> });</span></span>
<span class="line"></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;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setData</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;newValue&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h3 id="setvalue" tabindex="-1">setValue <a class="header-anchor" href="#setvalue" aria-label="Permalink to &quot;setValue&quot;"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} path</code> 数据路径</li><li><code>{any} data</code> 数据</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>按路径设置数据,等同于 <code>setData(data, path)</code>。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</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;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">setValue</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.age&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">25</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">);</span></span></code></pre></div><h3 id="ondatachange" tabindex="-1">onDataChange <a class="header-anchor" href="#ondatachange" aria-label="Permalink to &quot;onDataChange&quot;"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} path</code> 数据路径</li><li><code>{Function} callback</code> 回调函数</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>监听指定路径的数据变化。</p></li><li><p><strong>示例:</strong></p></li></ul><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</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;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">onDataChange</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user.name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, (</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">newVal</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;"> console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;用户名变更:&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, newVal);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><h3 id="offdatachange" tabindex="-1">offDataChange <a class="header-anchor" href="#offdatachange" aria-label="Permalink to &quot;offDataChange&quot;"></a></h3><ul><li><p><strong>参数:</strong></p><ul><li><code>{string} path</code> 数据路径</li><li><code>{Function} callback</code> 回调函数</li></ul></li><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>取消监听数据变化。</p></li></ul><h3 id="getdefaultdata" tabindex="-1">getDefaultData <a class="header-anchor" href="#getdefaultdata" aria-label="Permalink to &quot;getDefaultData&quot;"></a></h3><ul><li><p><strong>返回:</strong></p><ul><li><code>{any}</code> 默认数据</li></ul></li><li><p><strong>详情:</strong></p><p>根据字段配置获取默认数据。</p></li></ul><h3 id="init" tabindex="-1">init <a class="header-anchor" href="#init" aria-label="Permalink to &quot;init&quot;"></a></h3><ul><li><p><strong>返回:</strong></p><ul><li><code>{Promise&lt;void&gt;}</code></li></ul></li><li><p><strong>详情:</strong></p><p>初始化数据源。</p></li></ul><h3 id="destroy" tabindex="-1">destroy <a class="header-anchor" href="#destroy" aria-label="Permalink to &quot;destroy&quot;"></a></h3><ul><li><p><strong>返回:</strong></p><ul><li><code>{void}</code></li></ul></li><li><p><strong>详情:</strong></p><p>销毁数据源,清理资源。</p></li></ul><h2 id="事件" tabindex="-1">事件 <a class="header-anchor" href="#事件" aria-label="Permalink to &quot;事件&quot;"></a></h2><p>DataSource 继承自 EventEmitter支持以下事件</p><table tabindex="0"><thead><tr><th>事件名</th><th>说明</th></tr></thead><tbody><tr><td><code>change</code></td><td>数据变化时触发</td></tr></tbody></table><h3 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to &quot;示例&quot;"></a></h3><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</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;">ds.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">on</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;change&#39;</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;"> console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;数据已变化&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, ds.data);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">});</span></span></code></pre></div><h2 id="字段配置-dataschema" tabindex="-1">字段配置 (DataSchema) <a class="header-anchor" href="#字段配置-dataschema" aria-label="Permalink to &quot;字段配置 (DataSchema)&quot;"></a></h2><table tabindex="0"><thead><tr><th>参数</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>string</code></td><td>字段名</td></tr><tr><td><code>type</code></td><td><code>string</code></td><td>字段类型</td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>字段标题(可选)</td></tr><tr><td><code>description</code></td><td><code>string</code></td><td>字段描述(可选)</td></tr><tr><td><code>defaultValue</code></td><td><code>any</code></td><td>默认值(可选)</td></tr><tr><td><code>fields</code></td><td><code>DataSchema[]</code></td><td>子字段(对象类型时)(可选)</td></tr></tbody></table><h3 id="字段配置示例" tabindex="-1">字段配置示例 <a class="header-anchor" href="#字段配置示例" aria-label="Permalink to &quot;字段配置示例&quot;"></a></h3><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</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;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> schema</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;"> id: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;user_ds&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;base&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fields: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;id&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;number&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, defaultValue: </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:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;string&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, defaultValue: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#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;"> name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;profile&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;object&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> fields: [</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { name: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;avatar&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;string&#39;</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;bio&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, type: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;string&#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>`,37)])])}const E=s(d,[["render",n]]);export{k as __pageData,E as default};