Element 对象对应一个组件、子组件或子看板,下面统称为组件。二开代码被绑定在哪个组件上,这个组件的 Element 对象就会赋值给这个类的 elememt 属性。
通过此对象可以操作对应的组件,获取设置项、修改设置项、数据联动、监听事件等。
Element 对象由系统创建并绑定,用户无需构造。
class Button {
init() {
console.log(this.element.name);
}
}
export default Button;获取组件的名称。
readonly name: string
获取组件的设置项。
/**
* 获取某个设置项的值
* @param paths 设置项的路径表达
* @returns 该设置项的值
*/
getOption(paths: string | string[]): any
修改组件的设置项。
/**
* 修改某个设置项的值
* @param paths 设置项的路径表达
* @param value 设置项的值
*/
setOption(paths: string | string[], value: any): void
让组件触发数据联动。
/**
* 触发联动
* @param linkage 联动条件
*/
applyLinkage(linkage:{name:string,value:any} | {name:string,value:any}[]): void
让组件取消数据联动。
/**
* 取消联动
* @param names 可选。要取消的联动的key数组,不传则取消所有联动
*/
withdrawLinkage(names?: string[]): void获取组件的数据。已弃用,建议使用 readData 替代。
/**
* @deprecated 使用readData替代
* 获取组件的数据
* @param paths 数据设置项的路径表达
* @param encode 获取数据的格式(json或array),默认为json
* @returns 返回该组件勾选的数据
*/
getFullData(paths: string | string[], encode?: "json" | "array"): any
读取数据。从 v4.2.0 开始支持。
/**
* 读取数据
* @since 4.2.0
* @param paths 设置项的路径表达,支持多项
* @param callback 数据读取完时回调
* @param options
* * dataFormat 可选值有"row", "column", "object"。默认值为"row"
* 对于以下示例表格数据:
* | A | B | C |
* | a1 | b1 | c1 |
* | a2 | b2 | c2 |
* | a3 | b3 | c3 |
* 返回结果如下
* "object" : [{A:"a1", B:"b1", C:"c1"}, {A:"a2", B:"b2", C:"c2"}, {A:"a3", B:"b3", C:"c3"}]
* "row" : [[a1, b1, c1], [a2, b2, c2], [a3, b3, c3]]
* "column" : [[a1, a2, a3], [b1, b2, b3], [c1, c2, c3]]
* * callbackOnDataChanged 为true时,监听数据变化,每次数据变化时都会回调callback
*/
readData(paths: string | string[] | string[][], callback: ReadDataCallback, options?: ReadDataOptions): any[];
异步读取数据。从 v4.2.0 开始支持。
/**
* 异步读取数据
* @since 4.2.0
* @param paths 设置项的路径表达,支持多项
* @param options
* * dataFormat 可选值有"row", "column", "object"。默认值为"row"
* 对于以下示例表格数据:
* | A | B | C |
* | a1 | b1 | c1 |
* | a2 | b2 | c2 |
* | a3 | b3 | c3 |
* 返回结果如下
* "object" : [{A:"a1", B:"b1", C:"c1"}, {A:"a2", B:"b2", C:"c2"}, {A:"a3", B:"b3", C:"c3"}]
* "row" : [[a1, b1, c1], [a2, b2, c2], [a3, b3, c3]]
* "column" : [[a1, a2, a3], [b1, b2, b3], [c1, c2, c3]]
* @returns resolve数据读取结果的Promise
*/
readDataAsync(paths: string | string[] | string[][], options?: ReadDataAsyncOptions): Promise<any[]>
添加组件的事件监听。
/**
* 添加事件监听
* @param name 事件类型
* @param callback 回调函数
*/
addEventListener(name: string, callback: Callback): void;
type Event = {
type: string,//事件类型
}
type MessageEvent = Event & {
origin: string,//消息发送者来源
source: {
postMessage: (data: any) => void,//给消息发送者回复消息
fromSelf: boolean,//当前为iframe组件,并且消息来源于此iframe
},
}
type Callback = (ev: Event) => void
移除组件的事件监听。
/**
* 删除事件监听
* @param name 事件类型
* @param callback 可选。回调函数
*/
removeEventListener(name: string, callback?: Callback): void
触发组件上的事件。
/**
* 触发事件
* @param name 事件类型
* @param data 可选。事件关联的数据
*/
emit(name: string, data?: any): void
以下事件都可以被 addEventListener 监听到,部分事件可以直接用 emit 方法触发,具体请查看对应事件的描述。
当数据变化时触发。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.addEventListener("data-changed", (ev: Event)=>{
const paths: string | string[] = ev.paths;
//paths为发生变化的option的paths
});当设置项变化时触发。
注意:为了防止大规模监听带来的性能下降,只有被读取过的字段才会触发回调。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
//!!!!!注意 先读取该属性,才能监听到该属性的变化
const optionValue = this.element.getOption(["XXXXXX"]);
element.addEventListener("option-changed", (ev: Event)=>{
const paths = ev.paths;
//处理数据变化时的逻辑
if(Paths.equals(paths,["XXXXXX"])){
// Your code here
}
});收到 postMessage 事件时触发。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.addEventListener("message", (ev: MessageEvent)=>{
const { data, origin, source } = ev;
//data为收到的数据
//origin为消息来源字符串
//source可以用来回复消息
source.postMessage({msg: "test"});
});当对应的组件被鼠标单击时触发。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.addEventListener("click", (ev: Event)=>{
const data = ev.data;
});主动发送 click 事件,可以触发元素的点击,对于 3d 元素还会触发元素的选中状态的切换。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.emit("click");当鼠标进入对应的组件时触发。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.addEventListener("mouseenter", (ev: Event)=>{
const data = ev.data;
});主动发送 mouseenter 事件,可以触发元素的鼠标进入事件
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.emit("mouseenter");当鼠标离开对应的组件时触发。
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.addEventListener("mouseleave", (ev: Event)=>{
const data = ev.data;
});主动发送 mouseleave 事件,可以触发元素的鼠标进入事件
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.emit("mouseleave");可以自定义事件名称,然后通过交互来触发,或者通过 emit 方法来触发。
通过如下代码添加自定义事件:
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.addEventListener("my-test-event", (ev: Event)=>{
const data = ev.data;
//如果通过下面的emit触发,则data为{test:123}
});通过相同的 element 对象,调用 emit 方法来触发自定义事件:
//注意:二开代码仅支持js,为了方便说明类型,这里示例代码使用了ts
let element = ...;
element.emit("my-test-event", {test:123});也可以通过设置交互来触发:

判断 element 是否与组件建立关联。
/**
* element与组件是否建立关联
* @returns 是否建立关联
*/
isEmpty(): boolean
获取组件暴露的 instance 对象。通过该对象可实现一些高级功能。
/**
* 获取组件暴露的instance对象。
* @returns 返回组件暴露的对象,未暴露时返回空对象
*/
getMountedInstance(): any以下组件暴露了 instance 对象:
ECharts 图表组件暴露了 ECharts 实例对象,参见echarts 文档。
获取当前元素的所有扩展的实例列表,从 v4.2.0 开始支持。
/**
* 获取当前元素的所有扩展的实例列表
* @returns 所有扩展的实例列表
*/
getExtensionInstances(): Array<Object>
获取当前元素的所有扩展的第一个实例,从 v4.2.0 开始支持
/**
* 获取当前元素的所有扩展的第一个实例
* @returns 所有扩展的第一个实例
*/
getExtensionInstance(): Object
获取当前元素的子元素列表,从 v4.2.0 开始支持。
/**
* 获取当前元素的子元素列表
* @returns 子元素列表
*/
getChildren(): Array<Element>
获取当前元素的子元素列表,从 v4.2.0 开始支持。
/**
* 获取当前元素的父元素
* @returns 父元素
*/
getParent(): Element
将当前的元素动态复制出来一个,注意该方法是一个异步方法,目前只有鲸孪生中的元素可以使用该方法,从 v4.2.0 开始支持。
/**
* 将当前的元素动态复制出来一个
* @param name 克隆出来元素的名字
* @returns 返回promise
*/
clone(name: string): Promise<Element>
删除当前元素,注意只有被 clone 出来的元素才可以被删除。非 clone 出来的元素调用该方法将无任何效果,从 v4.2.0 开始支持。
/**
* 删除当前元素
* @returns void
*/
remove(): void