Skip to content

Node

Node@tmagic/core 的节点基类,继承自 EventEmitter,表示 DSL 中的一个节点。

构造函数

typescript
new Node(options: NodeOptions)

NodeOptions

参数类型说明
configMNode节点配置
parentNode父节点(可选)
pagePage所属页面(可选)
appApp应用实例

属性

属性类型说明
dataMNode节点配置数据
styleobject节点样式
eventsEventConfig[]事件配置
instanceany组件实例
pagePage | undefined所属页面
parentNode | undefined父节点
appApp应用实例
storeStore节点存储
eventKeysMap<string, symbol>事件键映射

实例方法

setData

  • 参数:

    • {MNode} data 节点数据
  • 返回:

    • {void}
  • 详情:

    设置节点数据,会更新 datastyleevents 属性。

  • 示例:

typescript
node.setData({
  id: 'button_1',
  type: 'button',
  style: { width: 100 },
  events: []
});

addEventToQueue

  • 参数:

    • {EventCache} event 待处理事件项;类型为 { method: string, fromCpt: any, args: any[] }
  • 返回:

    • {void}
  • 详情:

    将事件添加到节点内部的事件队列,等待组件实例 mounted 后再依次调用对应的方法(instance[event.method](event.fromCpt, ...event.args))。

setInstance

  • 参数:

    • {any} instance 组件实例
  • 返回:

    • {void}
  • 详情:

    设置组件实例,并绑定队列中的事件。

  • 示例:

typescript
// 通常在组件挂载时调用
node.setInstance(componentInstance);

registerMethod

@deprecated

该方法已废弃,请使用 setInstance 替代。

  • 参数:

    • {Methods} methods 方法集合,形如 { [name: string]: (...args: any[]) => any }
  • 返回:

    • {void}
  • 详情:

    将给定方法挂载到 instance 上。如果当前 instance 不存在,会先创建一个空对象再合并方法。

runHookCode

  • 参数:

    • {string} hook 钩子名称(如 'created''mounted''destroy' 等,由节点 schema 决定)
    • {object} params 参数(可选)
  • 返回:

    • {Promise<void>}
  • 详情:

    执行节点的钩子代码。内部会根据节点 schema 中 hook 字段的实际形态进行处理:

    • 兼容旧格式:当 data[hook] 直接是函数时,作为函数调用;
    • 新格式:当 data[hook]{ hookType, hookData[] }hookType === HookType.CODE 时,按顺序遍历 hookData,根据 codeType 调用 app.runCodeapp.runDataSourceMethod
  • 示例:

typescript
await node.runHookCode('mounted', { data: someData });

destroy

  • 返回:

    • {void}
  • 详情:

    销毁节点,清理事件监听和组件实例。

生命周期事件

Node 实例会触发以下生命周期事件:

事件名说明
created组件创建完成时触发
mounted组件挂载完成时触发
destroy组件销毁时触发
update-data数据更新时触发

监听示例

typescript
node.on('mounted', () => {
  console.log('组件已挂载');
});

node.on('update-data', (newData) => {
  console.log('数据已更新', newData);
});

Powered by 腾讯视频会员平台技术中心